node.js - 如何在mongodb聚合项目阶段合并两个对象?
问题描述
我的聚合管道中有以下结构数组。尝试合并对象和 setUnion 运算符。
{
combs:[
[
{
name:"A",
c_type:"A"
},
{
type:"visual",
severity:"Normal"
}
],
[
{
name:"B",
c_type:"B"
},
{
type:"visual",
severity:"Normal"
}
]
]
}
我期待以下结果产生一些统计数据。请帮我。
{
combs:[
{
name:"A",
c_type:"A",
type:"visual",
severity:"Normal"
}
{
name:"B",
c_type:"B",
type:"visual",
severity:"Normal"
}
]
}
解决方案
“没有$unwind操作可以实现吗?”
嗯,是。只要您的数组数组结构始终以这种方式映射,那么您实际上只需要管道中的一个阶段:
db.collection.aggregate([
{ "$addFields": {
"combs": {
"$map": {
"input": "$combs",
"in": { "$mergeObjects": "$$this" }
}
}
}}
])
所以实际上,$map
操作符在这里是一种比$unwind
处理每个数组元素更有效的方法。此外,由于$mergeObjects
期待“对象数组”,这就是数组数组的每个元素实际上是什么。所以简单地在数组的{ "$mergeObjects": "$$this" }
每个外部成员上。
根据您提供的数据生成输出:
{
"_id" : ObjectId("5d8865c273375a6a4cc9e76a"),
"combs" : [
{
"name" : "A",
"c_type" : "A",
"type" : "visual",
"severity" : "Normal"
},
{
"name" : "B",
"c_type" : "B",
"type" : "visual",
"severity" : "Normal"
}
]
}
推荐阅读
- python - 如何使用 Python panda 在 csv 中添加新行
- c - 为什么结构成员必须始终具有标识符?
- vb.net - VB .Net 导航每个链接并获取特定的 url
- azure - 如何使用 App Insights 关联前端和后端?
- regex - Visual Studio Snippet:我可以使用 TM_FILENAME 从 RELATIVE_FILEPATH 获取命名空间吗?
- cmake - 在 gcloud 上部署烧瓶应用程序时出现“找不到 CMAKE_CXX_COMPILER”错误
- javascript - mat-slider 不听 getelementbyid
- sql - 当receiver_id 是my_id 或sender_id 是my_id 时,如何获取我和marge 的所有消息
- c - 如何在 C 中使用自定义库
- kotlin - 发布请求上的 Ktor JSON 解析不起作用