2013-06-26 52 views
1

這裏是我想要查詢MongoDB的查詢在陣列

{ 
    "_id":"asdf0-002f-42d6-b111-ade91df09249", 
    "user":[ 
     { 
     "_id":"14bfgdsfg0-3708-46ee-8164-7ee1d029a507", 
     "n":"aaa" 
     }, 
     { 
     "_id":"aasdfa89-5cfe-4861-8a9a-f77428158ca9", 
     "n":"bbb" 
     } 
    ] 
} 

該文件有2個用戶參考,幷包含用戶_id和其他雜項信息的樣本文件。我有2個用戶標識,並試圖通過用戶標識獲取此文檔。我也不知道2個ID的順序。這是一個可能的查詢?

col.findOne({ 
    user:{ 
     $all:[ 
     { 
      _id:"14bfgdsfg0-3708-46ee-8164-7ee1d029a507" 
     }, 
     { 
      _id:"aasdfa89-5cfe-4861-8a9a-f77428158ca9" 
     } 
     ] 
    } 
}) 

^^我試過的東西不起作用。

回答

1

你接近你的$ all嘗試。

col.findOne({ 
    "user._id":{ 
     $all : [ "14bfgdsfg0-3708-46ee-8164-7ee1d029a507", 
      "aasdfa89-5cfe-4861-8a9a-f77428158ca9" ] 

    } 
} 

您可以通過包裝引號來查詢子文檔。從那裏$全部對您正在尋找的價值。

Mongodb find a document with all subdocuments satisfying a condition顯示了此類查詢的變體。

1

ElemMatch應該做的伎倆。

col.findOne({用戶:{$ elemMatch:{ 「_ ID」: 「14bfgdsfg0-3708-46ee-8164-7ee1d029a507」, 「_id」: 「aasdfa89-5cfe-4861-8a9a-f77428158ca9」}}} )

+0

我實際上需要在文檔中包含這兩個ID。這也匹配其他文件。這個文檔是這兩個用戶的聊天文檔,所以我需要他們兩個。 – Harry