Mongodb基本查詢整理

來源:互聯網
上載者:User

本文由我們組的程式媛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}},匹配的不是同一條評論了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.