2015-09-08 70 views
0

所以我有一個文件中有未知數量的對象,每個對象都有2個屬性。這是一個朋友列表的集合,我試圖確認是否有人在我允許用戶發送請求之前擁有某個用戶名的朋友。我保持朋友的列表子文檔,像這樣:如何查詢Mongo中充滿對象的子文檔?

>>all the _id and other properties<<, "ownerFriends":[{"friendId":"an id goes here", "friendUsername": "username"}, {"friendId":"another id", "friendUsername":"username2"}] 

我試圖做一個查詢,將返回USERNAME2如果考慮到作爲輸入,但我不知道該怎麼做用點符號表示,因爲我認爲您需要知道要查找的特定屬性,並且這些是ownerFriends屬性中的異端數量的友元對象。

回答

0

總之你有一個包含密鑰的對象,其價值之一是AR物體的光線。雖然我認爲你需要對當前用戶的_id也查詢

MyCollection.find({ ownerFriends: { $elemMatch: { friendUsername: searchString }}}); 

:您可以使用$elemMatch在你的情況下,陣列執行查詢。不知道您的收藏的細節,我只能猜測:

MyCollection.find({ userId: Meteor.userId(), ownerFriends: { $elemMatch: { friendUsername: searchString }}}); 
+0

當我嘗試做你的第二個命令(你說得對,我怎麼把它設置了),它只是返回的用戶id不匹配的文件看看friendUsername是否在ownerFriends中。當我自己做它時,它工作正常,雖然(但是,我確實需要它也查詢userId) – Subnatural

+0

可能需要'$和':'MyCollection.find({$和:[{userId:Meteor .userId()},{ownerFriends:{$ elemMatch:{friendUsername:searchString}}}]});' –

+0

我剛剛嘗試過類似的集合。如果我使用我的原始答案語法進行搜索,那麼如果我使用的字符串不在數組中,我就沒有結果。 '$和'不應該是必需的。 –