내 문서는 다음과 같습니다그룹은 첫 번째 범주에 의해, 다음 주 또는 월 단위로
{ "$match" : { "timestamp" : { "$gt" : FROM , "$lt" : TO }}},
{ "$sort" : { "timestamp" : 1 }},
{ "$group" : {
"_id" : "$category",
"data" : { "$push" : { "timestamp" : "$timestamp" , "amount" : "$amount" }}
}}
:
이제
{
category: "1",
timestamp: ISODate("2016-07-16T00:00:00.000Z"),
amount: 0
},
{
category: "1",
timestamp: ISODate("2016-08-18T00:00:00.000Z"),
amount: 15
},
{
category: "1",
timestamp: ISODate("2016-08-01T00:00:00.000Z"),
amount: 5
},
{
category: "2",
timestamp: ISODate("2016-08-18T00:00:00.000Z"),
amount: 10
}
I가 (이미 작동) 카테고리별로 첫 그룹을 싶습니다
및 다음은 data
배열 내의 해당 개체를 그룹화합니다. 을 매주 최대 금액으로 받으려면 (또는 사용자 입력에 따라 달). (월별로 그룹화 할 때)
결과는 다음과 같이 보일 것이다 :
{
_id: "1",
data: [
{
timestamp: "2016-07", // could also be an ISODate with
amount: 0 // first (or last) day of month
}, // if that makes things easier
{
timestamp: "2016-08",
amount: 15
}
]
},
{
_id: "2",
data: [
{
timestamp: "2016-08",
amount: 10
}
]
}
나는 unwind
에 data
배열을 시도하고 다시 그룹화,하지만 총 엉망 결과.
희망을 얻으려면이 멋진 아이디어/해결책이 필요합니다.
편집 : 추가 질문 :
나는 $match
을 위해 잘 작동 category
에 인덱스를 넣었습니다. 정렬을 위해 timestamp
에 색인을 두는 것도 유용할까요? (삽입 순서가 타임 스탬프 순서와 다를 수 있기 때문입니다.) 아니면이 색인이 집계에 어떤 영향을 미치지 않을까요?
와우! 고맙습니다! 나중에 다시 시도해 보겠습니다. 정렬을 위해 타임 스탬프 필드에 색인을 만드는 것에 대한 의견이 있습니까? –
코드를 기반으로 답변을 추가했습니다. group1과 unwind는 필요 없지만 컬렉션 자체에 그룹화를합니다. 그러나'$ match' 직후의'$ sort'는 예상 된 결과를 제공하지 못했습니다. 나는 이것을 설명 할 수 없다. 비록'$ sort'를'$ group' 단계 사이에 넣었습니다. –