高級查詢
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