- 插入
--插入单数据 db.集合名称.insertOne(JSON对象) --插入多条数据 db.集合名称.insertMany([JSON 1],[JSON 2],...[JSON n]) --示例: db.name.insertOne({name:"小明"}); db.name.insertMany([{name:"张三"},{name:"李四"},{name:"王五"}]);
- 查询
find 是MongDB 中查询数据的基本指令,相当于SQL中的SELECT
find返回的是游标
--查询所有 db.集合名称.find() --查询指定数据 查询条件 db.集合名称.find(JSON) --组合条件查询 db.集合名称.find({key:value,key:value}) --and查询 db.集合名称.find({$and:[{key:value},{key:value}]}) --or db.集合名称.find({$or:[{key:value},{key:value}]}) --正则查询 db.集合名称.find({key:/^B/}) --使用find搜索子文档 --先插入数据 db.fruit.insertOne({ name:"马六", from:{ country:"中国", province:"北京" } }) --查询 db.fruit.find({"from.country" : "中国"}) --查询子文档需要写子文档路径 写法不正确 db.fruit.find({"from" : {country : "中国"}}) --示例: db.name.find(); db.name.find({name:"张三"});
--find支持对数组中元素搜索 --插入数据 db.student.insert([ {"name" : "张三",course: ["语文","数学"]}, {"name" : "李四",course: ["语文","英语"]}, ]) --查询 db.student.find({course: "语文"}) sb.student.find( {$or: [{course: "语文"}, {course: "英语"}]} ) --find搜索数组中对象 --插入数据 db.classs.insertOne({ "title" : "高三一班", "students" : [ {"name" : "李四", "age" : 18, "sex" :"男"}, {"name" : "王五", "age" : 19, "sex" :"男"}, {"name" : "李华", "age" : 18, "sex" :"女"} ] }) --查找年龄是18记录 db.classs.find({"students.age" :18}) --查询对象多个字段 db.getCollection('classs').find({ "students.age":18, "students.sex":"女" }) db.getCollection('classs').find({ "students":{ $eleMatch:{"age":18,"sex":"男"} } }) --控制find返回字段 --find可以指定只返回指定的字段 -- _id字段必须明确指明不返回,否则默认返回 --再MongoDB中称为投影(projection) -- 不返回id 返回title db.movies.find({"age",18),{"_id":0,title:1}})
查询条件对照表
SQL | MQL |
a = 1 | {a:1} |
a <> 1 | {a:{$ne : 1}} |
a > 1 | {a:{$gt : 1}} |
a ≥ 1 | {a:{$gte : 1}} |
a < 1 | {a:{$lt : 1}} |
a ≤ 1 | {a:{$lte : 1}} |
a = 1 and b =1 | {a : 1,b : 1} 或 {$and: [{a : 1},{b : 1}]} |
a = 1 OR b = 1 | {$or: [{a : 1},{b : 1}]} |
a IS BULL | {a: {$exists: false}} |
a IN (1,2,3) | {a: {$in: [1,2,3]}} |
查询逻辑对照表
$lt | 存在并小于 |
$lte | 存在并小于等于 |
$gt | 存在并大于 |
$gte | 存在并大于等于 |
$ne | 不存在或存在但不等于 |
$in | 存在并在指定数组中 |
$nin | 不存在或不在指定数组中 |
$or | 匹配两个或多个条件中的一个 |
$and | 匹配全部条件 |
- 修改
db.集合名称.update(<查询条件>,<更新字段>)
使用updateOne表示无论条件匹配多少条记录 始终至更新第一条
使用updateMany 表示条件匹配多少条就更新多头条
updateOne/updateMany 要更新条件部分必须具有以下之一,否则会报错
$set/$unset
$push/$pushAll/$pop
$pull/$pullAll
$addToSet
update更新数组
$push 增加一个对象到数组底部
$pushAll 增加多个对象到数组底部
$pop 从数组底部删除一个对象
$pull 如果匹配指定的值,从数组中删除相应的对象
$pullAll 如果匹配任意的值,从数组中删除相应对象
$addToSet 如果不存在则增加一个值到数组
- 删除
--删除a等于1 db.集合名称.remove({a:1}) --删除a小于5 db.集合名称.remove({a:{$le:5}}) --删除所有记录 db.集合名称.remove({}) --不传参数会报错 db.集合名称.remove()
- drop
--删除一个集合 集合中的数据会被全部删除、索引也会被删除 db.集合名称.drop() --删除数据库 数据库相应文件 磁盘空间被释放 db.dropDatabase() --删除数据库 db.colToBeDropped.drop()