mongodb - Concat 两个聚合查询 MongoDB
问题描述
我有一个看起来像这样的集合:
{'start': '2011-01-29',
'target': [0.0, 2.0],
'cat': [0, 0, 0, 0, 0],
'state': 0},
...
我不得不在这个集合中使用 进行一些聚合db.collections.aggregate([])
,并且由于性能问题我不得不分成两个查询。
第一个返回我:
{'_id': {'state': 0, 'id': 0},
'start': '2011-01-29',
'cat': [0, 0, 0, 0, 0]}
...
第二个返回我:
{'_id': {'state': 0, 'id': 0},
'target': [0, 2, 1]
}
...
我想知道,如果有办法再次加入基于_id的结果?
或者有没有办法将两个查询独立声明为同一个?
db.collections.aggregate([
query1: {},
query2: {}
concat(query1,query2) ])
我想要的输出:
再次组合两个输出
{'_id': {'state': 0, 'id': 0},
'start': '2011-01-29',
'cat': [0, 0, 0, 0, 0]}
...
{'_id': {'state': 0, 'id': 0},
'target': [0, 2, 1]
}
...
进入这个
{'_id': {'state': 0, 'id': 0},
'start': '2011-01-29',
'target': [0, 2, 1]
'cat': [0, 0, 0, 0, 0]}
...
到目前为止,我的解决方案是使用 pymongo:
x1 = db.collection.aggregate(query1)
x2 = db.collection.aggregate(query2)
for i, j in zip(x1, x2):
j['target'] = i['target']
解决方案
您可以使用$facet阶段获得该行为,然后使用$group
将它们组合在一起
db.collection.aggregate([
{$facet:{
query1:[pipeline1],
query2:[pipeline2]
}},
{$project:{
result:{$concatArrays:["$query1","$query2"]}
}},
{$unwind: "$result"},
{$group: {
_id:"$_id",
document: {$mergeObjects:"$$ROOT"}
}},
{$replaceRoot:{ newRoot: "$document"}}
])
推荐阅读
- javascript - 验证表单后如何添加元素?
- python - 将二进制字符串分解为段
- linux - 如何获取influxdb中当前值与上一个值的差值?
- class - 这个关键字指向类方法中的全局对象?
- c# - 如何使用指针重新解释结构?
- docusignapi - 我收到此 Docusign 错误 CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY
- java - 使用 VolleyMultipartRequest 上传所有类型的文件但它不起作用,是否可以使用 Volley 上传所有类型的文件上传
- python - 如何为从下拉列表中选择的多个值编写 django 过滤器查询?
- android - 如何将数据从位置 X 设置到 ExpandListView 中特定组的子元素内的位置 Y?
- c++ - 有人可以帮我分解这行代码吗?