mongoDB基本操作笔记

/**
* MongoDB快速上手
* 课程目标:
* 理解MongoDB的业务场景、熟悉MongoDB的简介、特点和体系结构、数据类型等。
* 能够再Win和linux下安装和启动MongoDB、图形化管理界面Compass的安装使用
* 掌握MongoDB基本常用命令数据的CURD
* 掌握MongoDB的索引类型、索引管理、执行计划
*
* 业务应用场景:
* High performance 对数据库高并发读写的需求
* Huge Storage 对海量数据的高效率存储和访问需求。
* High Scalability && High Availability 对数据库的高可扩展性和高可用性的需求。
* 具体的应用场景如:
* 社交场景 存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等场景
* 游戏场景 存储游戏用户信息,用户的装备,记分等直接以内嵌文档的形式存储,方便查询,高效率存储和访问
* 物流场景 存储订单信息,订单状态再运送过程中会不断更新,以mongodb内嵌数组的形式存储
* 物联网场景 存储MongoDB存储所有接入的只能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度分析。
* 视频直播 存储用户信息,点赞互动信息等。
* 这些应用场景中,数据操作方面的共同特点:
* 数据量大
* 写入操作频繁(读写都很频繁)
* 价值较低的数据,对事物性要求不高
* 什么时候选择MongoDB?
* 应用不需要事物及复杂join支持
* 新应用 需求会变,数据模型无法确定,想快速迭代开发
* 应用需要2000-3000以上的读写QPS
* 应用需要TB甚至PB级别的数据存储
* 应用发展迅速,需要快速水平扩展
* 应用要求存储的数据不丢失
* 应用需要99.99%高可用
* 应用需要大量的地理位置查询、文本查询
*
* MongoDB简介:
* MongoDB是一个开源、高性能、无模式的文档型数据库,当初的设计就是用于简化开发和方便扩展,是NoSQL书苦苦产品中的一种。是最像关系型数据库(MYSQL)的非关系型数据库。
* 它支持的书库结构非常松散,是一种类似于json的格式叫bson,所以它可以存储比较复杂的数据类型,又相当的灵活。
* MongoDB中的记录是一个文档,它是一个由字段和值对(field:value)组成的数据结构。MongoDB文档类似于JSON对象,即一个文档认为就是一个对象。字段的数据类型是字符型,它的值除了使用基本的一些类型外,还可以包括其他文档、普通数组和文档数组。
*
* mysql MongoDB
* 数据库 数据库(db)
* 表 集合(collection)
* 行 文档(doucment)
*
*
*
* CURD命令:
* show dbs; //查看当前所有数据库
* use articledb; //切换数据库到articledb数据库
* db; //查看当前所在库
* db.dropDatabase() //删除当前库
* db.createCollection(name) //集合显示创建
* show collections或者show tables //查看当前库中的集合(表)
* db.集合.drop //删除集合
* db.集合名称.insert()或者.save() //单个文档插入
* db.集合名称.insertMany() //批量文档插入
* db.集合名称.find({}) //基本查询-查询所有文档
* db.集合名称.find({字段名:"条件"}) //基本查询-根据条件查询
* db.集合名称.find({字段名:"条件"},{想要显示的字段:1,不想显示字段:0}) //投影查询
* db.集合名称.update(query,update,options) //文档修改
* -----文档覆盖修改例子: db.comment.update({_id:"1"},{likenum:NumberInt(1001)});
* -----文档局部修改例子: db.comment.update({_id:"2"},{$set:{likenum:NumberInt(889)}});
* -----文档批量修改例子: db.comment.update({userid:"1003"},{$set:{nickname:"秦始皇"}},{multi:true});
* -----文档列值增长修改例子:db.comment.update({_id:"3"},{$inc:{likenum:NumberInt(1)}});
* db.集合名称.remove(条件) //删除文档
* -----根据条件删除数据例子: db.comment.remove({_id:"1"});
* db.集合名称.remove({}) //删除全部数据慎用!
*
*
* 分页查询
* db.collection.count(query, options)
* db.集合名称.count() //统计所有记录数
* db.集合名称.count({userid:"1003"}) //根据条件统计记录数
*e
* 分页列表查询
* -----limit(限制查询数)
* -----skip(跳过数据数量)
* db.comment.find().limit(2).skip(2);
*
* 排序查询
* sort()方法对数据进行排序,sort方法可以通过参数指定排序的字段,并使用1和-1来指定排序的方式,其中1位升序排序,而-1是用于降序排列
* -----升序排序列子: db.comment.find({},{userid:1}).sort({userid:1});
*
* 正则查询
* MongoDB的模糊查询时通过正则表达式的方式实现的。格式为:
* db.collection.find({field:/正则表达式/})或db.集合.find({字段:/正则表达式/})
* -----例子: db.comment.find({content:/开水/});
*
* 比较查询
* <,<=,>,>=这个操作符也是很常用的格式如下
* db.集合名称.find({"field":{$gt:value}}) //大于:field > value
* $lt //小于
* $gte //大于等于
* $lte //小于等于
* $ne //不等于
*
* 包含查询
* 包含查询使用$in操作符
* db.comment.find({userid:{$in:["1003","1004"]}})
*
* 条件连接查询
* 我们如果需要查询同时满足两个以上条件,需要使用$and操作符进行关联。(相当于sql的and)
*
* $and:[{},{},{}] //and
* 例子:db.comment.find({$and:[{likenum:{$gte:700}},{likenum:{$lt:2000}}]});//查询comment集合中likenum字段大于等于700且小于2000的数据
* $and:[{},{},{}] //or
* 例子:db.comment.find({$or:[{userid:1003},{likenum:{$lt:1000}}]});//查询userid=1003或者likenum小于1000的数据
*
*
* 索引
* 索引的类型 单字段索引 复合索引 其他索引
* -----单子段索引 MongoDB支持在文档的单个字段上创建用户定义的升序/降序索引,称为单子段索引(Single Field Index)
* -----复合索引 MongoDB还支持多个字段的用户定义索引,即复合索引(Compound Index).
* -----其他索引 地理空间索引(Geospatial Index) 文本索引(Text Indexes) 哈希索引(Hashed Indexes)
* -----地理空间索引 为了支持地理空间坐标数据的有效查询,MongoDB提供了两种特殊的索引:返回结果时使用平面几何的二维索引和返回结果时使用球面几何的二维球面索引
* -----文本索引 MongoDB提供了一种文本索引类型,支持在集合中搜索字符串内容。这些文本索引不存储特定于语言的停止词,而将集合中的词作为词干,只存储根词
* -----哈希索引 为了支持基于散列的分片,MongoDB提供了散列索引类型,它对字段值的散列进行索引。这些索引在其范围内的值分布更加随机,但只支持相等匹配,不支持基于范围的查询。
*
* 索引查看
* db.collection.getIndexs()
* 创建索引
* db.collection.createIndex(keys,option)
* -----单个索引例子 db.comment.createIndex({userid:1});
* -----复合索引例子 db.comment.createIndex({userid:1,nickname:-1});
* 删除索引
* db.collection.dropIndex()
*
* 执行计划
* 分析查询性能通常使用执行计划(explain plan)来查看查询的情况,如查询耗费的时间、是否基于索引查询等。
* db.collection.find(query,options).explain(options)
*
* 涵盖的查询
* 当查询条件和查询的投影仅包含索引字段时,MongoDB直接从索引返回结果,而不扫描任何文档或将文档带入内存。这些覆盖的查询可以非常有效
*
*
*
*/

 

posted @ 2020-10-12 08:44  佳佳460  阅读(117)  评论(0编辑  收藏  举报