我正在研究mongodb聚合管道。我目前有以下文件:
{
"data": [
{ "type": "abc", "price": 25000, "inventory": 15 },
{ "type": "def", "price": 8000, "inventory": 150 }
]
}
我想上交它:
{
"abc": { "price": 25000, "inventory": 15 },
"def": { "price": 8000, "inventory": 150 }
}
我可以在一个$project
阶段中逐个字段地执行此操作,但是显然,我的实际示例比该简单示例具有更多的字段...而且我也不确定哪个值可以输入类型。 / p>
答案 0 :(得分:2)
由于data
是一个数组,因此可以使用类似于以下内容的聚合管道:
{type:x, price:y, inventory:z}
更改为[x,[{price:y, inventory:z}]]
[{x:{price:y,inventory:z}},...]
如果您需要更多详细信息,可以在有更多时间的情况下查看有关处理样品的信息。
答案 1 :(得分:1)
感谢 @Joe ,我设法创建了一个解决方案:
db.collection.aggregate([
{
$unwind: "$data"
},
{
$project: {
data: [
"$data.type",
{
price: "$data.price",
inventory: "$data.inventory"
}
],
}
},
{
$group: {
_id: "$_id",
doc: {
$push: "$$ROOT"
}
}
},
{
$replaceRoot: {
newRoot: {
$arrayToObject: "$doc.data"
}
}
}
])
结果:
[
{
"abc": {
"inventory": 15,
"price": 25000
},
"def": {
"inventory": 150,
"price": 8000
}
}
]