如何将具有一个对象的深度嵌套数组转换为 mongodb 聚合中的对象?
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
对象。
$mergeObject
将 recs
数组中的当前文档与 (1) 中的文档合并。
db.collection.aggregate([
{
"$project": {
_id: 1,
recs: {
"$map": {
"input": "$recs",
"in": {
"$mergeObjects": [
"$$this",
{
sales: {
$first: "$$this.sales.quantity"
}
}
]
}
}
}
}
}
])
要求是将所有 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
对象。$mergeObject
将recs
数组中的当前文档与 (1) 中的文档合并。
db.collection.aggregate([
{
"$project": {
_id: 1,
recs: {
"$map": {
"input": "$recs",
"in": {
"$mergeObjects": [
"$$this",
{
sales: {
$first: "$$this.sales.quantity"
}
}
]
}
}
}
}
}
])