2013-07-02 100 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" 
     } 
    } 
}