MongoDB와 함께 놀고 간단한 방법을 알아 내려고 노력 중입니다.
SELECT province, COUNT(*) FROM contest GROUP BY province
그러나 집계 함수를 사용하여 알아낼 수는 없습니다. 정말 이상한 그룹 구문을 사용하여 할 수 있습니다.
db.user.group({
"key": {
"province": true
},
"initial": {
"count": 0
},
"reduce": function(obj, prev) {
if (true != null) if (true instanceof Array) prev.count += true.length;
else prev.count++;
}
});
그러나 집계 기능을 사용하는 더 쉽고 빠른 방법이 있습니까?
답변
이것은 다음을 사용하여 더 쉬운 방법입니다 aggregate
.
db.contest.aggregate([
{"$group" : {_id:"$province", count:{$sum:1}}}
])
답변
집계 함수의 결과를 기반으로 추가 작업이 필요합니다. 마지막으로 MongoDB의 결과를 기반으로 집계 함수 및 작업에 대한 솔루션을 찾았습니다. Request
field 가있는 컬렉션 이 있습니다 request, source, status, requestDate
.
단일 필드 그룹 및 수 :
db.Request.aggregate([
{"$group" : {_id:"$source", count:{$sum:1}}}
])
여러 필드 그룹 및 개수 :
db.Request.aggregate([
{"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}}
])
필드를 사용하여 정렬하여 여러 필드 그룹화 및 계산 :
db.Request.aggregate([
{"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}},
{$sort:{"_id.source":1}}
])
다중 필드 그룹 별 및 개수를 사용한 정렬 :
db.Request.aggregate([
{"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}},
{$sort:{"count":-1}}
])
답변
그룹화 할 여러 열이 필요한 경우이 모델을 따르십시오. 여기에 의해 과수를 수행 status
하고 있습니다 type
.
db.BusinessProcess.aggregate({
"$group": {
_id: {
status: "$status",
type: "$type"
},
count: {
$sum: 1
}
}
})
답변
또한 그룹화를 제한해야하는 경우 다음을 사용할 수 있습니다.
db.events.aggregate(
{$match: {province: "ON"}},
{$group: {_id: "$date", number: {$sum: 1}}}
)
답변
MongoDB 3.4부터는 $sortByCount
집계를 사용할 수 있습니다 .
지정된 표현식의 값을 기준으로 수신 문서를 그룹화 한 다음 각 개별 그룹의 문서 수를 계산합니다.
https://docs.mongodb.com/manual/reference/operator/aggregation/sortByCount/
예를 들면 다음과 같습니다.
db.contest.aggregate([
{ $sortByCount: "$province" }
]);
답변
이 유형의 쿼리는 저에게 효과적이었습니다.
db.events.aggregate({$group: {_id : "$date", number: { $sum : 1} }} )
http://docs.mongodb.org/manual/tutorial/aggregation-with-user-preference-data/를 참조 하십시오
답변
나를 위해 일한 몽고 쉘 명령 :
db.getCollection(<collection_name>).aggregate([{"$match": {'<key>': '<value to match>'}}, {"$group": {'_id': {'<group_by_attribute>': "$group_by_attribute"}}}])