2013-07-02 102 views
0

我有一組集合在我蒙戈dB,其中I組的成員存儲在一個嵌入式列表:無法查詢嵌入列表蒙戈

 { _id: 9876, 
     name: group138, 
     members: [{ login: user1, password: user1pass}, 
        { login: user2, password: user2pass}], 
     path: '/group1/group13/', 
     } 

我想找到一種方法,有幾個屬於用戶將這個組放入同一個集合中以避免多個db查詢(和回調調用)。

當用戶登錄時,我需要檢索他和他所屬的組。我想通了,我不能在同一時間詢問他的登錄名和密碼的用戶:

db.groups.find({$and: [{"members.login": "user1pass"}, {"members.password" : "user2pass"}]}) 

返回它不應該返回它作爲密碼不正確的記錄。我如何執行正確的請求,以便檢查登錄名和密碼?

+0

你不是已經問這個問題?: http://stackoverflow.com/questions/17435891/query-item-in-inner-mongo-collection – JohnnyHK

+0

對不起,我有一個錯誤提交我的問題,所以我改變了一點,但兩個版本發佈。你能讓它重複嗎? – Luc

回答

1

當您在"members.login": "user1"上查詢時,您的意思是「返回一個包含登錄成員user1的組。與第二個子句類似,但它們不相關,因此它將返回包含用戶的任何組。給定的用戶名和給定密碼的成員,無論他們是否是相同的成員

你要尋找的是$elemMatch

{ 
    members: 
    { 
     $elemMatch: 
     { 
      login: "user1", 
      password: "user1pass" 
     } 
    } 
}