[英]How to convert array of objects into nested object in MongoDB aggregation pipeline
[英]How to convert deeply nested array with one object to object in mongodb aggregation?
要求是将所有sales
数组属性转换为具有第一个元素数量值的对象。 集合名称是branches
,示例数据如下。
[
{
"_id": 111,
"recs": [
{
"date": "01-01-2021",
"sales": [
{
"quantity": {
"P": 14,
"K": 0,
"U": 0
}
}
]
},
{
"date": "02-01-2021",
"sales": [
{
"quantity": {
"P": 23,
"K": 0,
"U": 0
}
}
]
}
]
},
{
"_id": 21,
"recs": [
{
"date": "01-01-2021",
"sales": [
{
"quantity": {
"P": 11,
"K": 0,
"U": 0
}
}
]
},
{
"date": "02-01-2021",
"sales": [
{
"quantity": {
"P": 31,
"K": 0,
"U": 0
}
}
]
}
]
}]
预期的响应如下。
[
{
"_id": 111,
"recs": [
{
"date": "01-01-2021",
"sale": {
"P": 14,
"K": 0,
"U": 0
}
}
]
}]
我尝试$map
, $addFields
但我找不到解决方案。
在$map
中,您需要:
$first
查询recs.sales
数组中第一个sales.quantity
object。$mergeObject
将recs
数组中的当前文档与 (1) 中的文档合并。db.collection.aggregate([
{
"$project": {
_id: 1,
recs: {
"$map": {
"input": "$recs",
"in": {
"$mergeObjects": [
"$$this",
{
sales: {
$first: "$$this.sales.quantity"
}
}
]
}
}
}
}
}
])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.