2016-12-05 3 views
-1

나는 MongoDb에 매우 익숙하다. 다음과 같이 여러 문서가있는 모음집이 있습니다.MongoDb SUM GROUP BY WHERE

{ 
    "vendor": "amazon", 
    "date": ISODate("2016-12-05T21:10:39.100Z"), 
    "products" : [ 
        { 
         "id": NumberLong(590573), 
         "totalSold": NumberLong(59), 
         "totalCost": NumberLong(7350), 
         "variations": [ 
             { 
              "varId": NumberLong(1), 
              "totalSoldV": NumberLong(30), 
              "totalCostV": NumberLong(3000) 
             }, 
             { 
              "varId": NumberLong(2), 
              "totalSoldV": NumberLong(29), 
              "totalCostV": NumberLong(4350) 
             }, 
         ] 
        } 
    ] 
} 

그래서 내가 무엇을 달성하려고하는 것은 내가 date에 의해 sum(totalSold)sum(totalCost) 그룹을 계산하려는 특정 product.id입니다. 나는 골재로 놀고 있었지만 그렇게 할 수 없었다.

+0

는 당신이 날짜를 기준으로 그룹을 의미합니까? – sergiuz

+0

@SergiuZaharie 각 문서에는 필드 날짜가 있습니다. 동일한 날짜 값을 가진 여러 문서가 있습니다. – KunalC

+0

당신은 같은 날을 의미합니까? 내 대답을 확인해보십시오. – sergiuz

답변

0
db.collection.aggregate([ 
    {$unwind: "$products"}, 
    {$match: {"products.id":NumberLong(590573) }}, 
    { 
     $group: { 
     _id: { 
      year : { "$year" : "$date" },   
      month : { "$month" : "$date" },   
      day : { "$dayOfMonth" : "$date" }, 
      hour : { "$hour" : "$date" }, 
      minute : { "$minute" : "$date" }, 
     }, 
     sumTotalSold: {$sum: "$products.totalSold"}, sumTotalCost: {$sum: "$products.totalCost"} 
    } 
    } 
]).pretty(); 

결과 :

{ 
    "_id" : { 
     "year" : 2016, 
     "month" : 12, 
     "day" : 5, 
     "hour" : 21, 
     "minute" : 10 
    }, 
    "sumTotalSold" : NumberLong(79), 
    "sumTotalCost" : NumberLong(9850) 
}