programing

$프로젝트가 있는 Mongo $그룹

instargram 2023. 5. 2. 22:16
반응형

$프로젝트가 있는 Mongo $그룹

키워드 수를 같이 구하려고 합니다.parentId,categioryId그리고.llcId나의 db는

{
    "_id" : ObjectId("5673f5b1e4b0822f6f0a5b89"),
    "keyword" : "electronic content management system",
    "llcId" : "CL1K9B",
    "categoryId" : "CL1K8V",
    "parentId" : "CL1K8V",

}

나는 노력했다.$project와 함께$group

db.keyword.aggregate([
    {
        $group: {
            _id: "$llcId",
            total: {$sum: 1},
        }
    },
    {
        $project: {
            categoryId: 1, total: 1
        }
    }
])

그리고 그것은 나에게 다음과 같은 결과를 줍니다.

{ "_id" : "CL1KJQ", "total" : 17 }
{ "_id" : "CL1KKW", "total" : 30 }

하지만 결과적으로 실제 데이터도 필요합니다. llcId,categoryId,keyword,total표시하려고 했습니다.cetgoryId사용하여 키워드 지정합니다.$project그러나 표시되는 것은_id총계입니다.내가 무엇을 놓쳤습니까?

다음 정보를keyword문서를 다음 기준으로 그룹화해야 하는 카운트keyword필드에서 누적 연산자를 사용하여 문서 카운트를 가져옵니다.다른 필드 값의 경우, 키워드 값을 기준으로 모든 문서를 그룹화하므로, 다른 필드를 가져오려면 각 그룹에 대해 첫 번째 문서의 값을 반환하는 연산자를 사용하는 것이 최선입니다.그렇지 않으면 연산자를 사용하여 각 그룹의 필드 값 배열을 반환해야 할 수 있습니다.

var pipeline = [
    {
        "$group": {
            "_id": "$keyword",
            "total": { "$sum": 1 },
            "llcId": { "$first": "$llcId"},
            "categoryId": { "$first": "$categoryId"},
            "parentId": { "$first": "$parentId"}
        }
    }
];

db.keyword.aggregate(pipeline)

그룹화 기준llcId그래서 그것은 하나 이상을 줄 것입니다.categoryIdllcId.네가 원한다면categoryId결과적으로, 당신은 그것을 당신의 그룹 쿼리에 써야 합니다.예:

db.keyword.aggregate([
{
    $group: {
        _id: "$llcId",
        total: {$sum: 1},
        categoryId:{$max:"$categoryId"}
    }

},
{
    $project: {
        categoryId: 1, total: 1
    }
}])

언급URL : https://stackoverflow.com/questions/35176641/mongo-group-with-project

반응형