![](/img/trans.png)
[英]How to increment value in multiple fields and multiple documents in mongodb in one query
[英]How to merge multiple documents in one. MongoDB
我想創建一個新文檔,它從具有相同buyer
所有訂單中獲取所有 carItems 。 如果它沒有一對(就像 Leonard 一樣),它會創建新文檔,但狀態為"orderId" : "merged"
。
例如:這是需要的情況,當一些客戶會下幾個不同的訂單但我只需要給出一個綜合配方。
收款orders
:
輸入
{
"_id" : "001",
"buyer": "Sheldon"
"cartItems" : [
{
"itemName" : "Water",
"itemPrice" : 3
}
],
"totalCost" : 3
},
{
"_id" : "002",
"buyer" : "Sheldon",
"cartItems" : [
{
"itemName" : "Milk",
"itemPrice" : 2
}
],
"totalCost" : 2
},
{
"_id" : "003",
"buyer" : "Sheldon",
"cartItems" : [
{
"itemName" : "Butter",
"itemPrice" : 4
}
],
"totalCost" : 4
},
{
"_id" : "004",
"buyer" : "Leonard",
"cartItems" : [
{
"itemName" : "Water",
"itemPrice" : 3
}
],
"totalCost" : 3
}
輸出
{
"_id" : "003_new",
"buyer" : "Sheldon",
"cartItems" : [
{
"itemName" : "Water",
"itemPrice" : 3
},
{
"itemName" : "Milk",
"itemPrice" : 2
},
{
"itemName" : "Butter",
"itemPrice" : 4
}
],
"totalCost" : 9,
"orderId" : "merged"
},
{
"_id" : "004_new",
"buyer" : "Leonard",
"cartItems" : [
{
"itemName" : "Water",
"itemPrice" : 3
}
],
"totalCost" : 3,
"orderId" : "merged"
}
如果您在 JS 中提供示例會更好。
db.orders.aggregate([
{$sort: {_id: 1, buyer: 1}},
{$unwind: '$cartItems'},
{$group: {_id: '$buyer', cartItems: {$push: '$cartItems'},
totalCost: {$sum: '$totalCost'},
id: {$last: {$concat: ["$_id", "_", "new" ]}},
buyer: {$last: '$buyer'}}},
{$addFields: {orderId: 'merged', _id: '$id'}},
{$project: {"id": 0 }}])
順便說一句,它是 mongodb shell,但它是 JS ;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.