是的,我在这里检查了其他工会问题,但这似乎有所不同。
这是我要为mongo转换的SQL查询
SELECT column1 from table1
UNION
SELECT column1 from table2
在我的mongo数据库中,我最多可以有12个集合,每月一个。
data.2013.01
data.2013.02
.
.
data.2013.12
绘图时,我想一次在图表上显示多个月。这就引出了一个问题,即如何在mongo中创建UNION。
答案 0 :(得分:4)
我认为您将得出的最终结论是您的架构不正确。将具有相同目的和形状的所有对象放入单个集合中。那是如何与mongodb协调工作的。按月制作收藏品是一个错误,会导致你与mongo无休止的不必要的战斗。一旦您按预期在一个集合中包含所有内容,聚合就可以按照aggregation example of usernames ordered by join month按月处理分组。
答案 1 :(得分:1)
首先阅读:
http://docs.mongodb.org/manual/reference/sql-aggregation-comparison/
mongo没有类似union
的内容,但我认为$or
对您的需求非常有用。
答案 2 :(得分: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 } }]
}}
])