我的mongo数据库中有一个组合集,我将组成员存储在嵌入式列表中:
{ _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"}]})
返回不应该返回的记录,因为密码不正确。如何执行正确的请求以检查登录名和密码?
答案 0 :(得分:2)
当你在"members.login": "user1"
上查询时,你说“返回一个包含登录成员user1
的组。与第二个句子类似,但它们是无关的,所以它会返回任何包含具有给定用户名的用户和具有给定密码的成员的组,无论他们是否是同一成员。
您要找的是$elemMatch
:
{
members:
{
$elemMatch:
{
login: "user1",
password: "user1pass"
}
}
}