2017-04-14 9 views
2

同じ文書番号buyerを持つすべての注文からすべてのcartItemを取得する新しい文書を作成したいと思います。そしてペアがない場合(Leonardのように)、新しい文書を作成しますが、状況は"orderId" : "merged"です。複数のドキュメントを1つにマージする方法。 MongoDB

例: いくつかの顧客がいくつかの異なる注文を行うが、1つの統合されたレシピを与える必要がある状況に必要です。

コレクションorders:あなたはJSでの例を提供する場合 { "_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" }

入力 { "_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 } 出力が良いだろう。

+0

)MongoDBの集合https://docs.mongodb.com/manual/reference/operator/aggregation/group/ –

答えて

1
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のシェルだが、それはJSだ、私はあなたが試みるべきだと思い

+0

Thanxそれは良い仕事です! –

関連する問題