mongodb——超好用的$

如果各位看過我之前的mongo博客,大家就會發現$是非常強大的。本篇博客中我們就專門來介紹一些常用的$操作符。

查詢類

關鍵字 解釋 語法 例子
$eq 值相等 {field:{$eq:value}} db.test.find({name:{$eq:“tom”}})
$gt 大於 {field:{$gt:value}} db.test.find({age:{$gt:13}})
$gte 大於等於 {field:{$gte:value}} db.test.find({age:{$gte:13}})
$lt 小於 {field:{$lt:value}} db.test.find({age:{$lt:14}})
$lte 小於等於 {field:{$lte:value}} db.test.find({age:{$lte:14}})
$ne 不等於 field:{$ne:value}} db.test.find({age:{$ne:10}})
$in 目標值在指定數組裏面 {field:{$in:[value1,…,valueN]}} db.test.find({age:{$in:[12,20]}})
$nin 目標值不在指定數組裏面 {field:{$nin:[value1,…,valueN]}} db.test.find({age:{$nin:[12,20]}})

邏輯操作類

關鍵字 解釋 語法 例子
$or 邏輯或 {$or:[{expression1},…,{expressionN}]} db.test.find({$or:[{name:“tom”},{name:“jim”}]})
$and 邏輯與 {$and:[{expression1},…,{expressionN}]} db.test.find({$and:[{name:“tom”},{age:13}]})
$not 與表達式不匹配的值(邏輯非) {field:{$not:{expression}}} db.test.find({name:{$not:{$eq:“tom”}}})
$nor 與任意表達式(多個)都不匹配的值 {$nor:[{expression1},…,{expressionN}]} db.test.find({$nor:[{name:“tom”},{age:13}]})

屬性操作類

關鍵字 解釋 語法 例子
$exists 查詢文檔中是否存在指定屬性的文檔 {field:{$exists:boolean} db.test.find({y:{$exists:true}})
$type 查詢指定屬性爲某一類型的文檔 {field:{$type:typeNumber}}或者{field:{$type:alias}} db.test.find({“x”:{KaTeX parse error: Expected 'EOF', got '}' at position 7: type:1}̲})或者db.test.fin…type:“number”}})

數組操作類

關鍵字 解釋 語法 例子
$all 查詢出文檔的數組屬性包含指定數組的文檔 {field:{$all:[value1,…,valueN]}} db.test.find({“favorite.fruit”:{$all:[“apple”]}})
$elemMatch 查詢出目標數組有一個元素滿足所有查詢條件的文檔 {field:{$elemMatch:{query1,…,queryN}}} db.test.find({“favorite.fruit”:{KaTeX parse error: Expected '}', got 'EOF' at end of input: elemMatch:{ne:“pear”,$ne:“apple”}}})
$size 匹配數組長度爲指定大小的文檔 {field:{$size:number}} db.test.find({“favorite.fruit”:{$size:2}})

投影類(影響返回結果的屬性)

關鍵字 解釋 語法 例子
field.$ 在查詢簡單數組時,返回數組中匹配到的第一個元素 {“field.$”:不爲0或者false} db.test.find({“favorite.fruit”:{$eq:“apple”}},{“favorite.fruit.$”:1})
$elemMatch 在查詢複雜數組時(數組裏面是bson對象),返回數組裏面匹配到的第一個bson {field:{$elemMatch:{針對數組bson結構的查詢條件}}} db.test.find({class:“1”},{students:{$elemMatch:{age:12}}})
$slice 切片(分頁) {field:{$slice:number}} number爲正數則返回前n個,number爲負數則返回後n個;{field:{$slice:[skipNum,limitNum]}} 表示跳過skipNum的數量,返回limitNum的元素 db.test.find({class:“1”},{students:{$slice:2}})

修改屬性值類

關鍵字 解釋 語法 例子
$inc 對目標屬性做加減法 {$inc:{field1:num1,…,fieldN:numN}} db.test.update({z:1},{$inc:{x:1,y:1}})
$mul 對目標屬性做乘法 {$mul:{field1:num1,…,fieldN:numN}} db.test.update({z:1},{$mul:{x:2,y:2}})
$mod 取餘 {field:{$mod:[除數,餘數]}} db.test.find({x:{$mod:[2,1]}})
$rename 將目標屬性修改屬性名 {$rename:{field1:newName1,…,fieldN:newNameN}} db.test.update({z:1},{$rename:{x:“a”,y:“b”}})
$set 更改某一個屬性的值,而不是全部替換 {$set:{field1:num1,…,fieldN:numN}} db.test.update({z:1},{$set:{a:1,b:1}})
$unset 刪除文檔中的某一個字段,若不存在則不操作 {$unset:{field1:anyValue,…,fieldN:anyValue}} db.test.update({z:1},{$unset:{“c”:“2”}})
$min 將文檔中的值與輸入的值比較,更新成較小的值 {$min:{field1:value1,…,fieldN:valueN}} db.test.update({z:1},{$min:{a:0,b:2}})
$max 將文檔中的值與輸入的值比較,更新成較大的值 {$max:{field1:value1,…,fieldN:valueN}} db.test.update({z:1},{$max:{a:0,b:2}})
$currentDate 將某一個屬性設置成當前時間 {KaTeX parse error: Expected '}', got 'EOF' at end of input: …tDate:{field1:{type1:typeValue1},…,fieldN:{$typeN:typeValueN}}} db.test.update({z:1},{$currentDate:{b:{$type:“timedtamp”}}})
$addToSet 添加一個元素到數組中(若數組中已存在則不添加) {$addToSet:{field1:value1,…,fieldN:valueN}} db.test.update({“z”:1},{$addToSet:{c:4}})
$pop 刪除數組中的第一個或者最後一個值,-1表示第一個,1表示最後一個 {$pop:{field:-1或者1}} db.test.update({z:1},{$pop:{c:-1}})
$pullAll 刪除數組中所有跟指定值相同的元素 {$pullAll:{field:[value1,…,valueN]}} db.test.update({z:1},{$pullAll:{c:[1,2]}})
$pull 刪除滿足條件的所有元素 {$pull:{field:value}} db.test.update({z:1},{$pull:{c:{$eq:3},c:3}})
$push 向數組中添加元素(可以重複添加) {$push:{field:value}} db.test.update({z:1},{$push:{c:1}})
$each 搭配pushpush和addToSet使用,如果要批量添加值,則可以通過添加數組的方式。$each會把要添加的數組一個一個拿出來添加到原數組中,不會把整個數組添加到原數組中 {KaTeX parse error: Expected '}', got 'EOF' at end of input: push:{field:{each:[value1,value2]}}} db.test.update({z:1},{KaTeX parse error: Expected '}', got 'EOF' at end of input: push:{c:{each:[1,2,3]}}})

複雜類

關鍵字 解釋 語法 例子
$regex 使用正則表達式查詢 很複雜 建議參考官網 很複雜 建議參考官網
$text 文本索引查詢 很複雜 建議參考官網 很複雜 建議參考官網
$where 把js表達式轉換成查詢 很複雜 建議參考官網 很複雜 建議參考官網
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章