mongodb 집계를 사용하여 데이터 집합을 집계하고 있습니다. 내 상황이 좀 복잡해. 나는 다음과 같은 컬렉션을했습니다 : 일 및 시간별 몽고드 집계
{
startTime: ISODate("2014-12-31T10:20:30Z"),
customerId: 123,
ping: "2",
link: "3"
}
지금 나는 다음과 같은 다른 컬렉션에 데이터를 집계 할 :
{
_id: {
day: ISODate("2014-12-31T00:00:00Z"),
customerId: 123
},
hours: [
{
hour: ISODate("2014-12-31T10:00:00Z"),
pings: 2,
links: 3
},
{
hour: ISODate("2014-12-31T11:00:00Z"),
pings: 5,
links: 6
}
]
}
하면 데이터가 시간에 의해 처음으로 다음 날까지 그룹입니다 볼 수 있듯이. 하루에 그룹화 할 수있는 집계 쿼리가 있지만 시간별로 그룹화하는 방법은 무엇입니까? 어떤 아이디어?
var pipeline = [
{
$project : {
startTime : 1,
customerId: 1,
ping:1,
link:1,
date : "$startTime",
h : {
"$hour" : "$startTime"
},
m : {
"$minute" : "$startTime"
},
s : {
"$second" : "$startTime"
},
ml : {
"$millisecond" : "$startTime"
}
}
},
{
$project: {
startTime : 1,
customerId: 1,
ping:1,
link:1,
date : {
"$subtract" : [
"$date",
{
"$add" : [
"$ml",
{
"$multiply" : [
"$s",
1000
]
},
{
"$multiply" : [
"$m",
60,
1000
]
},
{
"$multiply" : [
"$h",
60,
60,
1000
]
}
]
}
]
}
}
},
{
$match: {
"startTime": {
$gte: new ISODate("2013-12-01T07:00:00Z"),
$lte: new ISODate("2014-01-01T08:00:00Z"),
}
}
},
// Aggregate the data
{
$group: {
_id: {day : "$date", customerId: "$customerId"},
pings : {$sum: "$ping"},
links : {$sum: "$links"}
}
}
];
감사합니다. 좀 더 도와 주실 수 있나요? 나는 지난 시간의 데이터를 매 시간마다 실행하여'{ "_id": { "customerId": 123, "day": ISODate ("2012-06-20 : 00 : 00 : 00Z ")}, "시간 ": [{"시간 ": ISODate ("2012-06-20 : 01 : 00 : 00Z "),"핑 ": 2,"링크 ": 3}]}' 위의 집계 쿼리 실행 중, 집계 데이터를 저장하려면이 컬렉션에 병합/upsert해야합니다. 어떻게하면 될까요? 감사합니다 – user3756522
@ user3756522 이것은 정말로 다른 질문처럼 들리며 의견보다는 의도를 올바르게 설명하는 새로운 게시물에 의해 가장 잘 제기됩니다. 답안에 표시된 검색어는 보내는 범위에 대해 매일 및 매시간 집계됩니다. 또한 이것에 대한'$ match'는 언제나 파이프 라인의 ** 첫 단계 **가되어야합니다. MongoDB 2.6을 사용하면 집계 출력은 결과를 처리하기 위해 반복하는 커서가 될 수 있습니다 –