[mongodb] MongoDB 그룹 수 선택 기준

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의 결과를 기반으로 집계 함수 및 작업에 대한 솔루션을 찾았습니다. Requestfield 가있는 컬렉션 이 있습니다 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"}}}])