【问题标题】:Getting the required documents from both the collections in one query in MongoDB-3.2.7在 MongoDB-3.2.7 的一个查询中从两个集合中获取所需的文档
【发布时间】:2016-11-22 04:13:34
【问题描述】:

我在 MongoDB 中有两个如下所示的集合。

lookupcol1

{ "_id" : 1, "sku" : "abc", description: "product 1", "instock" : 120, "groupId":100100},
{ "_id" : 2, "sku" : "def", description: "product 2", "instock" : 80,"groupId":100100 },
{ "_id" : 3, "sku" : "ijk", description: "product 3", "instock" : 60 },
{ "_id" : 4, "sku" : "jkl",description: "product 4", "instock" : 70 },
{ "_id" : 5, "sku": null, description: "Incomplete", "groupId":100100 },
{ "_id" : 6 }

lookupcol2

{ "_id" : 12, "sku" : "bcd", description: "product 2", "instock" : 121, "groupId":100100},
{ "_id" : 23, "sku" : "def", description: "product 2", "instock" : 810, "groupId":100100},
{ "_id" : 34, "sku" : "ijk", description: "product 3", "instock" : 60,"groupId":100100 },
{ "_id" : 45, "sku" : "jkl",description: "product 4", "instock" : 70 },
{ "_id" : 56, "sku": "def", description: "Incomplete","groupId":100100 },
{ "_id" : 67, "groupId":100100}

我想从“groupId”为 100100 的两个集合中获取文档。

预期的结果应该如下所示。

结果:

{ "_id" : 1, "sku" : "abc", description: "product 1", "instock" : 120, "groupId":100100},
{ "_id" : 2, "sku" : "def", description: "product 2", "instock" : 80,"groupId":100100 },
{ "_id" : 5, "sku": null, description: "Incomplete", "groupId":100100 },
{ "_id" : 12, "sku" : "bcd", description: "product 2", "instock" : 121, "groupId":100100},
{ "_id" : 23, "sku" : "def", description: "product 2", "instock" : 810, "groupId":100100},
{ "_id" : 34, "sku" : "ijk", description: "product 3", "instock" : 60,"groupId":100100 },
{ "_id" : 56, "sku": "def", description: "Incomplete","groupId":100100 },
{ "_id" : 67, "groupId":100100}

任何人都可以告诉我如何获得以上输出。

【问题讨论】:

  • 您是否考虑过将所有集合合并为一个?
  • 是的,我考虑过,但我想知道这两种方法。
  • 在 MongoDB 中,我们不能像在 SQL 中那样进行连接。另一种方法是从驱动程序/应用程序端;为每个集合制作一个 getByGroupId,然后制作一个使用所有其他集合并返回您想要的结果的 getByGroupID。我听说最新版本中有一个 $lookup(聚合),但我不知道。

标签: mongodb mongodb-query mongodb-java


【解决方案1】:
var q = {groupId: 100100};
var r1 = db.lookupcol1.find(q);
var r2 = db.lookupcol2.find(q);
r1.concat(r2);

【讨论】:

  • 你好@Amiram,我想要一个查询中的全部结果
  • 您可以使用 $setUnion 进行聚合,但这很复杂。为什么不查询两次?
  • 谢谢@Amiram,我在上面的例子中只给出了 2 个集合,但我需要从 20 个集合中收集数据,比如 baove。所以在这种情况下我需要查询 20 次。
  • 据我所知,我认为你做不到
  • 我可以为此使用 $setUnion 吗?
猜你喜欢
  • 2021-09-23
  • 1970-01-01
  • 2016-11-26
  • 1970-01-01
  • 1970-01-01
  • 2020-08-14
  • 1970-01-01
  • 2019-02-05
  • 2020-12-12
相关资源
最近更新 更多