Mongodb Aggregate 쿼리는 Array의 개체 내부 필드를 기반으로 모든 값을 합산합니다.

Dec 11 2020

dataMongoDB에 다음과 같은 컬렉션 이 있습니다.

문서 1-

{
    metadata:[
        {
            "title": "High",
            "val": 12
        },
        {
            "title": "Medium",
            "val": 15
        },
        {
            "title": "Low",
            "val": 2
        }
    ]
}

문서 2-

{
    metadata:[
        {
            "title": "High",
            "val": 10
        },
        {
            "title": "Medium",
            "val": 12
        },
        {
            "title": "Low",
            "val": 20
        }
    ]
}

& 곧..

값을 val기준으로 필드 를 집계하고 싶습니다 title. 출력은 다음과 같아야합니다.

{
    "High": 22,
    "Medium": 27,
    "Low": 22
}

어떻게해야합니까? 미리 감사드립니다.

답변

2 turivishal Dec 11 2020 at 12:51
  • $unwindmetadata배열 분해
  • $grpup에 의해 title합산val
  • $groupnull로 배열을 키와 값에서 객체로 변환 $arrayToObject하고 다음을 사용하여 객체를 병합합니다.$mergeObjects
db.collection.aggregate([
  { $unwind: "$metadata" }, { $group: {
      _id: "$metadata.title", sum: { $sum: "$metadata.val" } } }, { $group: {
      _id: null,
      metadata: {
        $mergeObjects: { $arrayToObject: [
            [{ k: "$_id", v: "$sum" }]
          ]
        }
      }
    }
  }
])

운동장

1 ray Dec 11 2020 at 12:31

먼저 metadata배열을 풀 수 있습니다 . 그런 다음 $ group 및$cond to $당신의 가치를 합산하십시오.

여기입니다 몽고 놀이터 참조하십시오.