本文由我們組的程式媛MM匯總整理
----------------------------------- 我是分割線 ------------------------------------------
精確匹配
- 單個索引值對:{"age":28}, 返回"age"值為28的所有文檔。
- 多個索引值對:{"username":"tom", "age":28},將多個查詢條件組合在一起,等同於:條件1 AND 條件2 AND …AND 條件N。該查詢文檔返回:使用者名稱為tom,並且年齡為28的所有文檔。
條件匹配
範圍
- “$lt”、“$lte”、“$gt”、“$gte”
比較操作符,分別對應:< $lt <= $lte> $gt>= $gte
可以組合起來尋找一個範圍內的值。
如:年齡在18到35之間的查詢文檔是:{"age": {"$gte":18, "$lte":35}}
該範圍查詢方式對日期類型值尤為方便。
- “$ne”
“不相等”操作符,對應:!=
如使用者名稱不是tom的查詢文檔是: {"username": {"$ne":"tom"}}
OR查詢
- $in
用來查詢一個鍵對應的多個值,對單個鍵做OR查詢。
如:活動中獎號碼是1,4,8,要找出全部這些中獎資料的查詢文檔是:{"ticket_no":{"$in":[1, 4, 8]}}
- $nin
相對地,$nin返回與數組中值都不符合的資料,如找出沒有中獎的資料的查詢文檔是:{ "ticket_no": {"$nin": [1, 4, 8]} }。
- $or
用來查詢多個鍵的任意值,會更通用一些。它接受一個所有可能條件的數組作為參數,也可以含有其他條件句。如:{ "$or": [ { "ticket_no":{ "$in":[1, 4, 8] } }, { "winner":true } ]}
$or的第一個條件應儘可能地匹配更多的文檔,這樣才最有效。
$not
$not是元條件句,可以用在任何其他條件之上,表取反。
如:查詢文檔:{"value":{"$mod":[5,1]}},合格值有:1, 6, 11等。
如果想要尋找值為2, 3, 4, 5, 7, 8, 9, 10, 12等的資料就可以用:{"value":{"$not":{"$mod":[5,1]}}}。
$exists
用來查詢文檔中某個鍵是否存在,如找出不存在鍵名為key1的文檔:{"key1":{"$exists":false}};
相反,{"key1":{"$exists":true}}表示存在key1鍵。
類型匹配
Null
查詢文檔{"x":null},執行後返回:包含有索引值對“x”:null的文檔,以及不存在x鍵的文檔。
Regex
PCRE支援的Regex都能被MongoDB所接受。
如查詢文檔{key1”} 都會返回。
可用於SQL中的like情境。
查詢數組
數組中每一個元素都是整個鍵的值。如有文檔:
文檔1:{"fruit":["apple", "pear", "peach"]},文檔2:{"fruit":["peach", "banana", "apple"]},文檔3:{"fruit":["orange", "banana", "apple"]},
- 單個元素匹配
若查詢文檔為:{"fruit":"apple"},文檔1,2,3都會被成功匹配。
- 多個元素匹配
需要用到$all條件句了,若查詢文檔為:{"fruit":{"$all":["apple","peach"]}},則文檔1,2會被匹配,與元素順序無關。
- 精確匹配
若查詢文檔為:{"fruit":["apple", "pear", "peach"]},則只匹配文檔1,對於缺少或冗餘,以及順序不一致的都不會匹配到。
- 下標匹配
採用key.index方式,數組下標從0開始。如查詢文檔:{"fruit.2":"apple"},則文檔2,3被匹配。
- 長度匹配
若查詢文檔為:{"fruit":{"$size":3}},表示查詢長度為3的數組,文檔1,2,3都會被匹配。
內嵌文檔的查詢
- 點標記法
如文檔:{ "_id":1, "name":{"first":"Joe", "last":"Smith"}}
則可以這樣查詢:{"name.first":"Joe", "name.last":"Smith"}
- $elemMatch
當需要對一個內嵌文檔的多個鍵操作時使用。
如有文檔:{ "comments": [ { "name": "Tom", "score": 3, "comment": "bad" }, { "name": "Jim", "score": 6, "comment": "good" } ]}
要尋找Tom評分大於5的評論文檔,只能這樣: {"comments":{"$elemMatch":{"name":"Tom","score":{"$gt":5}}}}
而不能: {"comments":{"name":"Tom","score":{"$gt":5}}},不能匹配"comment"鍵了。
或 {"comments.name":"Tom","comments.score":{"$gt":5}},匹配的不是同一條評論了。