如果各位看過我之前的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 | 搭配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表達式轉換成查詢 | 很複雜 建議參考官網 | 很複雜 建議參考官網 |