MongoDB - 语句Cheatsheet
CURD
insert
db.collection.insertOne()
db.collection.insertMany()
db.fruits.insertOne({name:"apple"})
db.fruits.insertMany([
{name:"apple"},
{name:"pear"}
])
find
单条件查询:db.movies.find({"year":1997})
多条件与查询:
db.movies.find({"year":1997,"type":"action"})
或 db.movies.find({$and:[{"year":1997}, {"type":"action"}]})
多条件或查询:
db.movies.find({$or:[{"year":1997},{"type":"action"}]})
正则表达式查询:
db.movies.find({"title":/^B/})
搜索子文档
🌰case 1
db.fruits.insertOne({
name:"apple",
from: {
country:"China",
province:"Guangdon"
}
})
db.fruits.find({"from.country":""China})
db.fruits.find({"from":{country:"China"}})
两者意义不同,前者搜索from子文档country字段为China的;后者搜索from子文档只有一个country字段且为China的
搜索数组
🌰case 2
db.fruits.insertMany([
{ name:"apple", color : ["red", "green"] },
{ name:"Mango", color : ["yellow","green"]}
])
db.fruits.find({color:"red"})
即找到color数组里面有red的记录,会有一条数据
db.fruits.find({$or:[{color:"red"},{color:"yellow"}]})
即找到color数组里面有red或有yellow的记录,会有两条结果
控制find返回的字段 projection
e.g. db.movies.find({"type":"action"},{"_id":0,"title":1})
即返回字段只有title,连mongodb默认的id也不返回
remove
删除a=1的记录:db.collection.remove({a:1})
删除a小于5的记录:
db.collection.remove({a:{$lt:5}})
删除所有记录:
db.movies.remove({})
update
db.fruits.updateOne({name:"apple"}, {$set:{from:"China"}})
查询条件和更新操作都是必须的
- updateOne只更新第一条,updateMany匹配多少更新多少
- 更新部分必须具备以下操作符之一:
- $set/$unset
- $push/$pushAll/$pop
push:增加一个对象到数组底部
pushAll:增加多个对象到数组底部
pop:从数组底部删除一个对象 - $pull/$pullAll
pull:如果匹配指定的值,从数组删除相应对象 - $addToSet
如果不存在则增加一个值到数组
drop
db.collection.drop()
聚合 Aggregate
概念
- Pipeline 即为聚合的整个管道流程
- Stage 每个流程的步骤
pipeline = [$stage1, $stage2, ...]
db.collection.aggregate(
pipeline,
{ option }
);
常见步骤
SQL和MQL对比
🌰 1
⬇️
🌰2
⬇️
其他
查询某个字段不为null:db.col.findOne({"fieldName":{$ne:null}})
todo
mongodb有优化器吗?
mongodb里什么时候加不加引号?