2017-02-09 23 views
1

我必須在類別的基礎上求和subOrderAmt。下面是示例。

{ 
    "_id" : ObjectId("589b2214a8c4d36ab9f3a7ec"), 
    "_class" : "com.homeshop18.clickstream.mongo.domain.widget.Order", 
    "orderId" : NumberLong(946588817), 
    "subOrders" : [ 
     { 
      "subOrderId" : NumberLong("41357348772"), 
      "productId" : NumberLong(32164935), 
      "subOrderAmt" : "220.00", 
      "category" : NumberLong(3043), 
      "isCancelled" : false 
     }, 
     { 
      "subOrderId" : NumberLong("41357348773"), 
      "productId" : NumberLong(33173277), 
      "subOrderAmt" : "200.00", 
      "category" : NumberLong(3043), 
      "isCancelled" : false 
     }, 
     { 
      "subOrderId" : NumberLong("41357348774"), 
      "productId" : NumberLong(32852897), 
      "subOrderAmt" : "201.00", 
      "category" : NumberLong(3042), 
      "isCancelled" : false 
     } 
    ], 
    "bannerUserId" : "abdb1ec23721832dafa3e5535ff5295c75ad6f8cd2c1c91093b9ad7ff65de8ff" 
} 

SQLDB查詢: - SELECT SUM(subOrderAmt)作爲totalAmt,category FROM(order.subOrders) GROUP BY`類別

MongoDB的查詢

db.order.aggregate([ {$ unwind:「$ subOrders」},{$ group:{_id:{category:「$ subOrders.category」},totalAmt:{$ sum:「$ subOrders.subOrderAmt」},count:{$ sum:1} }}]) {「_id」:{「category」: NumberLong(3042)},「totalAmt」:0,「count」:1} {「_id」:{「category」:NumberLong(3043)},「totalAmt」:0,「count」:8}

無法獲得subOrderAmt的總和。請幫助。

+0

你沒有得到預期結果的原因是因爲'subOrderAmt'被聲明爲String。使用數字數據類型。 – Shailendra

+0

如果您使用數字數據類型,您將得到以下結果 - {「_id」:3042,「summation」:201} {「_id」:3043,「summation」:420} – Shailendra

+0

您的查詢將是db.order.aggregate ([{$ unwind:'$ subOrders'},{$ group:{_ id:「$ subOrders.category」,「summation」:{$ sum:「$ subOrders.subOrderAmt」}}}]) – Shailendra

回答

0

docs

例字段值結果

{$總和:}值

的數值薩姆

{$總和:}數字的數值和非數字和值

{$ sum:}非數字或不存在0

您所在的subOrderAmt字段爲String。將值更改爲Number