簡體   English   中英

如何將多個文檔合二為一。 MongoDB

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM