0

我的 mongo db 中有一个组集合,我将组的成员存储在嵌入列表中:

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

我想找到一种方法让属于该组的几个用户进入同一个集合,以避免多个数据库查询(和回调调用)。

当用户登录时,我需要检索他和他所属的组。我刚刚发现我不能同时用他的登录名和密码查询用户:

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

返回不应返回的记录,因为密码不正确。如何执行正确的请求以检查登录名和密码?

4

1 回答 1

2

当您查询时"members.login": "user1",您说的是“返回一个包含具有登录名的成员的组user1。与第二个子句类似,但它们不相关,因此它将返回包含具有给定用户名的用户和成员的任何组使用给定的密码,无论他们是否是同一个成员。

您正在寻找的是$elemMatch

{
  members: 
    {
      $elemMatch:
        {
          login: "user1",
          password: "user1pass"
        }
    }
}
于 2013-07-02T21:51:18.540 回答