【问题标题】:MongoDB find documents based on array of valuesMongoDB 根据值数组查找文档
【发布时间】:2017-08-01 18:29:29
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 保留列表,然后遍历find操作产生的文档,然后进行关联。
  • 听起来应用程序坏了。
  • @Kamsky:你认为应用程序为什么坏了?
  • @WiredPrairie:所以在 Mongo 中没有办法做到这一点?
  • 返回重复文件?不。我当然不希望它表现得那样。

标签: node.js mongodb database


【解决方案1】:

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

不知道您需求的更广泛背景(也许告诉我们您想要实现的目标——不是错误?),但如果您想在 gamesusers 类似的东西可能是合适的:

  1. 检索游戏集合后;只需创建一个辅助哈希映射(普通 JS 对象),对于给定的owner id,它将返回其游戏的数组。
  2. 检索有关所有者用户的信息。
  3. 如果您想知道,哪些游戏属于特定的user,只需将她的id 传递给来自 1. 的数据结构,并获取包含游戏的数组。

这是你要找的吗?您需要 1. 方面的帮助吗?

【讨论】:

  • 谢谢,我已经通过一些服务器端的 JS 代码解决了这个问题。我本来希望能够通过查询来完成我的任务,但解决方法是合适的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 2015-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-21
相关资源
最近更新 更多