2014-09-03 5 views
1

저는 몽고를 처음 사용하고 "돈"이 참이고 "creationDate"가 다음 달의 "거래"라는 이름의 "거래"라는 이름의 몽고 db 컬렉션에서 총 금액을 얻으려고합니다. 2014 년 9 월, 일별 그룹화.조건부 집계가 포함 된 Mongo 집계

포스트 그레스, 난 등이 작성할 수 있습니다

select to_char("creationDate", 'YYYY-MM') as "Month", sum(totalamount) 
from transactions 
where "creationDate" >= '2014-09-01' 
and paid is true 
group by "Month" 

을 그러나, 나는에서 CreationDate의 조건을 추가하는 방법을 잘하고 몽고 지급 아니에요. 조건부 집계에 대해 읽었지 만 논리적 조건뿐 아니라 날짜와 달에도 작동하도록하는 방법을 모르겠습니다.

샘플 데이터 :

{ "totalamount" : 10, "creationDate" : ISODate("2014-09-01T01:00:58.909Z"), "paid" : true} 
{ "totalamount" : 30, "creationDate" : ISODate("2014-09-01T03:00:58.909Z"), "paid" : true} 
{ "totalamount" : 20, "creationDate" : ISODate("2014-09-02T01:00:58.909Z"), "paid" : true} 

이것은 내가 뭘하려 : 그러나

db.transactions.aggregate( 
[ 
    { 
     $group: 
      { 
       _id: { 
        day: { $dayOfMonth: "$creationDate"}, 
        month: 
         { 
          $cond: [{ $gte: [$month: "$creationDate", 9]},9,0]         
         }, 
        year: 
         { 
          $cond: [{ $gte: [$year: "$creationDate", 2014]},2014,0]         
         }, 

        }, 
       collected: { 
        $sum: { 
         $cond: [ 
          {"$paid":"true"}, "$totalamount",0] 
        } 
       } 
      } 
    } 
] 
) 

, 나는 "SyntaxError: Unexpected token :"

이에 대한 모든 통찰력은 매우 도움이 될 것납니다. 고맙습니다!

답변

0

의견에 약간의 문제가 있습니다. 주로 {}이라는 여러 날짜 연산자를 포함하지 않으므로 잘못된 JSON이 배열 안에 생성됩니다. 들여 쓰기 스타일을 변경하면 서식 문제를 쉽게 찾을 수 있습니다.

db.transactions.aggregate([ 
    { "$group": { 
     "_id": { 
      "day": { "$dayOfMonth": "$creationDate" }, 
      "month": { 
       "$cond": [ 
        { "$gte": [ {"$month": "$creationDate"}, 9 ] }, 
        9, 
        0 
       ]         
      }, 
      "year": { 
       "$cond": [ 
        { "$gte": [ { "$year": "$creationDate" }, 2014] }, 
        2014, 
        0 
       ]         
      } 
     }, 
     "collected": { 
      "$sum": { 
       "$cond": [ 
        { "$eq": [ "$paid", "true" ] }, 
        "$totalamount", 
        0 
       ] 
      } 
     } 
    }} 
]) 
:

나 또한 개인적으로, 다른 언어를 잘 분석하고 미래의 구문 코딩 오류를 피하기 위해 당신이보고 할 게 인, "lint"에 쉽게 완전히 엄격한 JSON 표기법을 고수하는 것을 선호

$eq의 논리적 검사도 끝에 $sum에서 누락되었습니다. 이 경우 실제로 "문자열"값이 "true"가 아니라 true이 아닌 일반 부울로 지정하십시오.

관련 문제