高级查询
1. 并列查询
db.table.find({"Field1": 1, "Field2": 2})
2. 或查询
1) $or: 在不同字段或不同条件查询时使用
db.table.find({$or: [{"field1": 1}, {"field2": 2}]})
2) $in: 在相同字段或条件查询时使用
db.table.find({"age": {$in: [18, 20, 22]}})
3. Array查询
1) db.table.find({"Field": 1})
2) $all: 子集查询
db.table.find({list: {$all: [2,4,6,8]}})
4. Object查询
db.table.find({"class.name": "python"})
比较运算型
1. $gt(大于) / $gte(大于等于)
db.table.find({"score": {$gt: 80}})
2. $lt(小于) / $lte(小于等于)
db.table.find({"score": {$lt: 80}})
3. $eq(等于) / $ne(不等于)
update修改器
1. $inc: 引用增加
db.table.updateMany({}, {$inc:{"score": 1}}) # 在原基础上给所有score +1
2. $set: 修改数据 (key不存在就添加)
db.table.update({"score": 65}, {$set: {"score": 80}})
3. $unset: 强制删除Field
db.table.update({}, {$unset:{"age": 15}}) # 删除所有 age 字段
4. Array操作
1) $push: 增加操作 (前提: 增加的字段 key: value 中 value 类型为 Array)
db.table.updateOne({"age":18}, {$push: {"num": 1}})
db.table.updateOne({"age":18}, {$pushAll: {"num": 2, 3, 4}})
2) $pull: 指定删除Array中的某一个元素
db.table.updateOne({"age":18}, {$pull: {"num": 1}})
db.table.updateOne({"age":18}, {$pullAll: {"num": 2, 3}})
$pop: 删除Array中第一个(-1) 或 最后一个(1)元素
db.stu.updateOne({name:"ran"},{$pop: {"num": 1}}) # 删除最后一个元素
db.stu.updateOne({name:"ran"},{$pop: {"num": -1}}) # 删除第一个元素
注意: 只要满足条件,就会将Array中所有满足条件的数据全部清除掉
3) $set / $inc (更新元素)
db.table.updateOne({name:"ran", "num": 2},{$set: {"num.$":"燃"}})
db.table.updateOne({age:18,"c.name":"python"}, {$inc:{"c.$.score": 10}})
5. Object操作
db.table.updateOne({name:"ran"},{$set: {"class.name": "python"}})
db.table.updateOne({name:"ran"},{$unset: {"class.classtype": "python"}})
"$" 关键字
1. "$" 在 update 中加上关键字就是修改器
2. 单独出现的 "$" 字符为代指符
示例: {"_id": 123, "name": "jack", "score": 100 "num: [1,2,3,5,9,2]}
修改 num 中的 2 为 9
db.table.update({"score": 100, "num": 2}, {$set: {"num.$": 9}})
解释:
"$" 字符代表了符合条件元素的下标, 位置
使用 update, 满足条件的数据下标位置就会传递给 "$" 字符, 相当于对这个位置的元素进行更新操作
首先会寻找示例 Array 中的第一个 2, 再次操作会找下一个 2 .
MongoDB 之特殊关键字
1. limit: 选取
db.table.find().limit(2) # 从整张表中的第一条 Document 开始选取两条
2. skip: 跳过
db.table.find().skip(2) # 从整张表中的第一条 Document 开始计算, 往后跳两条.
3. limit + skip
db.table.find().skip(1).limit(2) # 只查看第2、3条数据
4. sort: 排序 升序 (1), 降序(-1)
db.table.find.sort({"price": 1})
5. 执行优先级
sort > skip > limit