3

如何为 mongo 转换以下 SQL 查询:

SELECT column1 from table1
UNION
SELECT column1 from table2

我最多有 12 个集合,每个月一个:

data.2013.01
data.2013.02
...
...
data.2013.12

绘图时,我想一次在图表上显示多个月。这给我们带来了一个问题,如何在 mongo 中创建 UNION。

4

3 回答 3

4

我认为您将得出的最终结论是您的架构不正确。将所有具有相同用途和形状的对象放入一个集合中。这就是如何与 mongodb 协调工作。按月收集是一个错误,会导致您与 mongo 进行无休止的不必要的战斗。一旦您按预期将所有内容放在一个集合中,聚合就可以按照 join month 排序的用户名聚合示例为您按月份处理分组。

于 2013-06-18T18:55:42.570 回答
1

首先阅读:

http://docs.mongodb.org/manual/reference/sql-aggregation-comparison/

mongo 没有类似的东西,union但我认为$or这对您的需求很有用。

阅读这个答案:https ://stackoverflow.com/a/14928646/1321404

于 2013-06-18T18:37:06.760 回答
0

开始Mongo 4.4,聚合框架提供了一个新$unionWith阶段,执行两个集合的并集(将两个集合的组合管道结果合并为一个结果集):

// collection1:
//   { "date" : "2013-12-27", "origin" : "collection1" }
//   { "date" : "2017-03-11", "origin" : "collection1" }
// collection2:
//   { "date" : "2014-11-02", "origin" : "collection2" }
db.collection1.aggregate([
  { $unionWith: "collection2" },
  { $project: { date: true } }
])
// { "date" : "2013-12-27" }
// { "date" : "2017-03-11" }
// { "date" : "2014-11-02" }

请注意,您可以通过首先选择列然后执行联合来获得相同的结果(正在合并的集合可以在执行联合之前应用聚合管道):

db.collection1.aggregate([
  { $project: { date: true } },
  { $unionWith: {
      coll: "collection2",
      pipeline: [{ $project: { date: true } }]
  }}
])
于 2020-03-15T15:14:58.073 回答