MongoDB根据值数组查找文档

时间:2013-11-13 23:46:59

标签: node.js mongodb database

我有一个名为“游戏”的集合,其文档存储游戏所有者的ID。

{
    "owner" : "88878b6c25c167d"
}
{
    "owner" : "88878b6c25c167d"
}
{
    "owner" : "af565f77f73469b"
}

然后我有另一个名为“users”的集合。

{
    "id" : "af565f77f73469b"
}
{
    "id" : "a881335e1d4cf17"
}
{
    "id" : "aa3ce3f7767c46b"
}
{
    "id" : "d19e52c0bd78bcb"
}
{
    "id" : "88878b6c25c167d"
}

所以第一个查询我会检索所有游戏的所有者并将这些值存储在一个数组中。['88878b6c25c167d', '88878b6c25c167d', 'af565f77f73469b'] 我想要执行的第二个查询应检索具有相应ID的用户的文档。以前我使用过这个查询:

db.users.find({'id':
    {'$in': [
        '88878b6c25c167d',
        '88878b6c25c167d',
        'af565f77f73469b'
    ]}})

这是问题所在:如果用户列出两次,它不会返回重复文档,如上所述。相反,我只得到一个。这打破了我的申请。如何确保每个所有者都返回一份文件?

1 个答案:

答案 0 :(得分:1)

MongoDB工作得很好---它找到所有用户,其id-s包含在数组中。

不了解您需求的更广泛背景(也许告诉我们您想要实现的目标 - 而不是错误?),但是如果您希望在{{1}之间建立关联}和games这样的东西可能是合适的:

  1. 检索游戏集合后;只需创建一个辅助哈希映射(普通JS对象),对于给定的users,它将返回其游戏数组。
  2. 检索有关所有者用户的信息。
  3. 如果你想知道哪些游戏属于特定的owner id,只需将她的user传递给1的数据结构,然后通过游戏获取数组。
  4. 这是你在找什么?你需要1的帮助吗??