2016-11-03 12 views
0

cart.nameでグループ化し、mongodbのcart.qtyの合計を検索するとします。以下はサンプルドキュメントです異なる値をグループ化し、mongodbの配列値の合計を表示するクエリ

{ 
    "_id" : ObjectId("581323379ae5e607645cb485"), 
    "cust" : { 
      "name" : "Customer 1", 
      "dob" : "09/04/1989", 
      "mob" : 999999999, 
      "loc" : "Karimangalam", 
      "aadhar" : { 

      } 
    }, 
    "cart" : [ 
      { 
        "name" : "Casual Shirt", 
        "qty" : 1, 
        "mrp" : 585, 
        "discperc" : 10, 
        "fit" : null, 
        "size" : "L" 
      }, 
      { 
        "name" : "Casual Shirt", 
        "qty" : 1, 
        "mrp" : 500, 
        "discperc" : 0, 
        "fit" : null, 
        "size" : "L" 
      }, 
      { 
        "name" : "Cotton Pant", 
        "qty" : 1, 
        "mrp" : 850, 
        "discperc" : 0, 
        "fit" : null, 
        "size" : "34" 
      }, 
      { 
        "name" : "Cotton Pant", 
        "qty" : 1, 
        "mrp" : 1051, 
        "discperc" : 10, 
        "fit" : null, 
        "size" : "34" 
      } 
    ], 
    "summary" : { 
      "bill" : 2822.4, 
      "qty" : 4, 
      "mrp" : 2986, 
      "received" : "2800", 
      "balance" : -22.40000000000009 
    }, 
    "createdAt" : ISODate("2016-10-28T10:06:47.367Z"), 
    "updatedAt" : ISODate("2016-10-28T10:06:47.367Z") 
} 

このような文書が多数あります。私は別の製品名(cart.name)とその合計数量ここ

{Casual Shirt , 30}, 
{Cotton Pant , 10}, 
{T-Shirt , 15}, 
{Lower , 12} 

は私のクエリはcart.nameと合計数量

db.order.aggregate([  
{ $unwind: "$cart" },  
{ $group: { 
    _id: "$cart.name", 
    totalQTY: { $sum:"$cart.qty"}, 
     count: { $sum: 1 } 
    }  
} 
]) 

することにより、グループにしようとしている以下のように出力をしたいが、それは間違って表示されます各製品名の値はtotalQtyです。私は手動でチェックした。

正しい質問をしてください。

答えて

0
> db.collection.aggregate([ 
...  { $unwind: "$cart" }, 
...  { $group: { "_id": "$cart.name", totalQTY: { $sum: "$cart.qty" }, count: { $sum: 1 } } } 
... ]) 

は、私は次のような結果を得る:あなたの集約パイプラインが正確であるよう

{ "_id" : "Cotton Pant", "totalQTY" : 2, "count" : 2 } 
{ "_id" : "Casual Shirt", "totalQTY" : 11, "count" : 2 } 

私はあなたが探しているものはわからないが、それが見えます。 (私はカジュアルシャツの数量をそれぞれ10と1に変更しました)

+0

ありがとうございました。それは正常に動作しています。 $ matchを使って合計を計算し、$ cart.nameではなく$ cartでグループ化しました。 間違ったクエリ db.collection.aggregate([ {$ unwind: "$ cart"}、 {$ match:{'cart.name': "カジュアルシャツ"}} - 商品名に一致する {$ group: {$ id: "$ cart"、totalQTY:{$ sum: "$ cart.qty"}、カウント:{$ sum:1}}} ...]) – suresh

関連する問題