如何为 mongo 转换以下 SQL 查询:
SELECT column1 from table1
UNION
SELECT column1 from table2
我最多有 12 个集合,每个月一个:
data.2013.01
data.2013.02
...
...
data.2013.12
绘图时,我想一次在图表上显示多个月。这给我们带来了一个问题,如何在 mongo 中创建 UNION。
我认为您将得出的最终结论是您的架构不正确。将所有具有相同用途和形状的对象放入一个集合中。这就是如何与 mongodb 协调工作。按月收集是一个错误,会导致您与 mongo 进行无休止的不必要的战斗。一旦您按预期将所有内容放在一个集合中,聚合就可以按照 join month 排序的用户名聚合示例为您按月份处理分组。
首先阅读:
http://docs.mongodb.org/manual/reference/sql-aggregation-comparison/
mongo 没有类似的东西,union
但我认为$or
这对您的需求很有用。
开始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 } }]
}}
])