2017-02-09 64 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