programing

문서 집합에 대한 각 값의 발생 횟수를 몽고 카운트

javajsp 2023. 7. 8. 10:36

문서 집합에 대한 각 값의 발생 횟수를 몽고 카운트

다음과 같은 문서가 있습니다.

{
  "user": '1'
},
{ "user": '1'
},
{
  "user": '2'
},
{
  "user": '3'
}

저는 모든 다른 사용자들과 그들의 각각의 숫자들을 순차적으로 정렬할 수 있기를 원합니다.따라서 제 출력은 다음과 같습니다.

{
  '1': 2,
  '2': 1,
  '3': 1
}

Mongo aggregate()로 이 작업을 수행할 수 있다고 생각합니다만, 이 작업을 위한 올바른 흐름을 파악하는 데 많은 어려움을 겪고 있습니다.

집계를 통해 필요한 형식이 아닌 결과를 얻을 수 있습니다.

db.collection.aggregate(
   {$group : { _id : '$user', count : {$sum : 1}}}
).result

샘플 문서의 출력은 다음과 같습니다.

"0" : {
    "_id" : "2",
    "count" : 1
},
"1" : {
    "_id" : "3",
    "count" : 1
},
"2" : {
    "_id" : "1",
    "count" : 2
}

2019년 1월에 이 글을 읽는 사람은 누구나 현재 Robo3T에서 수락된 답변이 작동하지 않습니다(반복:pipeline.length - 1오류).

다음 작업을 수행해야 합니다.

쿼리를 대괄호 집합으로 묶습니다.[]

제거하다.result끝부터

https://github.com/Studio3T/robomongo/issues/1519#issuecomment-441348191

로보3T에서 저를 위해 작동하는 @disposer의 수락된 답변에 대한 업데이트입니다.

db.getCollection('collectionName').aggregate(
    [ {$group : { _id : '$user', count : {$sum : 1}}} ]
)

MongoDb 3.6 이상에서는 연산자와 파이프라인을 사용하여 원하는 결과를 얻을 수 있습니다.다음 Aggregate 파이프라인을 실행해야 합니다.

db.collection.aggregate([
    {  "$group": {
        "_id": "$user",
        "count": { "$sum": 1 }
    } },
    { "$sort": { "_id": 1 } },
    {  "$group": {
        "_id": null,
        "counts": {
            "$push": {
                "k": "$_id",
                "v": "$count"
            }
        }
    } },
    { "$replaceRoot": {
        "newRoot": { "$arrayToObject": "$counts" }
    } }    
])

어느 쪽이 산출하는지

{
    "1" : 2,
    "2" : 1,
    "3" : 1
}

아래 집계 쿼리를 사용할 수 있습니다. 또한 결과를 원하는 대로 내림차순으로 정렬합니다.

db.collection.aggregate([
    { $group: { _id: "$user", count: { $sum: 1 } } },
    { $sort: { count: -1 } }
  ])

언급URL : https://stackoverflow.com/questions/28013318/mongo-count-occurrences-of-each-value-for-a-set-of-documents