Mongodb常用命令
Mongodb命令
删除数据库
db.dropDatabase()
创建集合
db.createCollection(name)
name: 要创建的集合名称
集合删除
db.collection.drop()
或 db.集合.drop()
单个文档插入
db.集合.insert( { writeConcern: , ordered: } )
批量插入
db.集合.insertMany( { writeConcern: , ordered: } )
大括号里面是json形式的语句
因为批量插入由于数据较多容易出现失败,因此,可以使用try catch进行异常捕捉处理
try {
db.集合.insertMany([{},{},{}])
} catch (e) { print (e); }
查询数据的语法
db.collection.find([query], [projection])
query:可选。使用查询运算符指定选择筛选器。若要返回集合中的所有文档,请省略此参数或传递空文档 ( {} )。
projection:可选。指定要在与查询筛选器匹配的文档中返回的字段(投影)。若要返回匹配文档中的所有字段, 请省略此参数
查询所有
db.集合.find() 或 db.集合.find({})
如果你只需要返回符合条件的第一条数据,我们可以使用findOne命令来实现,语法和find一样。
db.集合.findOne({ })
投影查询
如果要查询结果返回部分字段,则需要使用投影查询(不显示所有字段,只显示指定的字段)。
如:查询结果只显示 _id、userid、nickname :
db.comment.find({userid:“1003”},{userid:1,nickname:1})
{ "id" : “4”, “userid” : “1003”, “nickname” : “凯撒” }
{ “_id” : “5”, “userid” : “1003”, “nickname” : “凯撒” }
如:查询结果只显示 、userid、nickname ,不显示 _id :
db.comment.find({userid:“1003”},{userid:1,nickname:1,_id:0})
{ “userid” : “1003”, “nickname” : “凯撒” }
{ “userid” : “1003”, “nickname” : “凯撒” }
更新文档的语法:
覆盖的修改
db.集合.update({},{)})
执行后,我们会发现,这条文档除了修改的字段其它字段都不见了
局部修改
db.集合.update({要修改的部分},{$set:{修改之后的部分}})
批量的修改
db.集合.update({},{$set:{}},{multi:true})
提示:如果不加后面的参数,则只更新符合条件的第一条记录
列值增长的修改
如果我们想实现对某列值在原有值的基础上进行增加或减少,可以使用 $inc 运算符来实现。
db.集合.update({},{$inc:{} })
删除文档的语法结构
db.集合.remove(条件)
以下语句可以将数据全部删除,请慎用
db.集合.remove({})
如果删除_id=1的记录,输入以下语句
db.集合.remove({_id:“1”})
统计查询
统计查询使用count()方法,语法如下:
db.collection.count(query, options)
query:查询选择条件。
options:可选。用于修改计数的额外选项。
统计所有记录数:
db.集合.count()
默认情况下 count() 方法返回符合条件的全部记录条数。
分页列表查询
可以使用limit()方法来读取指定数量的数据,使用skip()方法来跳过指定数量的数据。
db.集合.find().limit(NUMBER).skip(NUMBER)
如果你想返回指定条数的记录,可以在find方法后调用limit来返回结果(TopN),默认值20,例如:
db.集合.find().limit(3)
skip方法同样接受一个数字参数作为跳过的记录条数。(前N个不要),默认值是0
db.集合.find().skip(3)
分页查询:需求:每页2个,第二页开始:跳过前两条数据,接着值显示3和4条数据
//第一页 db.集合.find().skip(0).limit(2)
//第二页 db.集合.find().skip(2).limit(2)
//第三页 db.集合.find().skip(4).limit(2)
排序查询
sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用 于降序排列。
db.集合.find().sort({KEY:1})
或 db.集合名称.find().sort(排序方式)
提示: skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit(),和命令编写顺序无关
正则的复杂条件查询
MongoDB的模糊查询是通过正则表达式的方式实现的。格式为:
db.collection.find({field:/正则表达式/})
或 db.集合.find({字段:/正则表达式/})
提示:正则表达式是js的语法,直接量的写法。
例如,我要查询评论内容包含“开水”的所有文档,代码如下:
db.集合.find({content:/开水/})
如果要查询评论的内容中以“专家”开头的,代码如下:
db.集合.find({content:/^专家/})
比较查询
<, <=, >, >= 这个操作符也是很常用的,格式如下:
db.集合名称.find({ “field” : { $gt: value }}) // 大于: field > value
db.集合名称.find({ “field” : { $lt: value }}) // 小于: field < value
db.集合名称.find({ “field” : { $gte: value }}) // 大于等于: field >= value
db.集合名称.find({ “field” : { $lte: value }}) // 小于等于: field <= value
db.集合名称.find({ “field” : { $ne: value }}) // 不等于: field != value
包含查询
包含使用$in操作符
不包含使用$nin操作符。
示例:查询评论的集合中userid字段包含1003或1004的文档
db.comment.find({userid:{$in:[“1003”,“1004”]}})
条件连接查询
我们如果需要查询同时满足两个以上条件,需要使用$and操作符将条件进行关联。(相 当于SQL的and) 格式为:
$and:[ { },{ },{ } ]
如果两个以上条件之间是或者的关系,我们使用 操作符进行关联,与前面 and的使用方式相同 格式为:
$or:[ { },{ },{ } ]
示例:查询评论集合中likenum大于等于700 并且小于2000的文档:
db.comment.find({KaTeX parse error: Expected '}', got 'EOF' at end of input: and:[{likenum:{gte:NumberInt(700)}},{likenum:{$lt:NumberInt(2000)}}]})
索引的查看
db.collection.getIndexes()
提示:该语法命令运行要求是MongoDB 3.0+
默认_id索引: MongoDB在创建集合的过程中,在 _id 字段上创建一个唯一的索引,默认名字为 id ,该索引可防止客户端插入两个具有相同值的文 档,您不能在_id字段上删除此索引。 注意:该索引是唯一索引,因此值不能重复,即 _id 值不能重复的。在分片集群中,通常使用 _id 作为片键。
索引的创建
说明: 在集合上创建索引。 语法:
db.collection.createIndex(keys, options)
keys:包含字段和值对的文档,其中字段是索引键,值描述该字段的索引类型。对于字段上的升序索引,请 指定值1;对于降序索引,请指定值-1。比如: {字段:1或-1} ,其中1 为指定按升序创建索引,如果你 想按降序来创建索引指定为 -1 即可。另外,MongoDB支持几种不同的索引类型,包括文本、地理空 间和哈希索引。
options:可选。包含一组控制索引创建的选项的文档.
options(更多选项)列表:
提示: 注意在 3.0.0 版本前创建索引方法为 db.collection.ensureIndex() ,之后的版本使用了 db.collection.createIndex() 方法, ensureIndex() 还能用,但只是 createIndex() 的别名。
索引的移除
说明:可以移除指定的索引,或移除所有索引
一、指定索引的移除
db.collection.dropIndex(index)
index:指定要删除的索引。可以通过索引名称或索引规范文档指定索引。若要删除文本索引,请指定 索引名称。
二、所有索引的移除
db.collection.dropIndexes()
提示: _id 的字段的索引是无法删除的,只能删除非 _id 字段的索引。
索引的使用
执行计划
分析查询性能(Analyze Query Performance)通常使用执行计划(解释计划、Explain Plan)来查看查询的情况,如查询耗费的时间、是 否基于索引查询等。
那么,通常,我们想知道,建立的索引是否有效,效果如何,都需要通过执行计划查看。
语法:
db.collection.find(query,options).explain(options)
关键点看: “stage” : “COLLSCAN”, 表示全集合扫描