programing

MongoDB 결과 쿼리를 평준화할 수 있습니까?

yellowcard 2023. 5. 25. 21:41
반응형

MongoDB 결과 쿼리를 평준화할 수 있습니까?

MongoDB 컬렉션에 깊이 중첩된 컬렉션이 있습니다.

다음 쿼리를 실행할 때:

db.countries.findOne({},{'data.country.neighbor.name':1,'_id':0})

다음과 같은 중첩된 결과가 나옵니다.

{"data" : {
  "country" : [
    {
      "neighbor" : [
        {
          "name" : "Austria"
        },
        {
          "name" : "Switzerland"
        }
      ]
    },
    {
      "neighbor" : {
        "name" : "Malaysia"
      }
    },
    {
      "neighbor" : [
        {
          "name" : "Costa Rica"
        },
        {
          "name" : "Colombia"
        }
      ]
    }
  ]
}}

자, 이것이 제가 원하는 것입니다.

['Austria', 'Switzerland', 'Malaysia', 'Costa Rica', 'Colombia']

또는 다음과 같습니다.

{'name':['Austria', 'Switzerland', 'Malaysia', 'Costa Rica', 'Colombia']}

아니면 다른 비슷한 것들도...이것이 가능합니까?

사용할 수 있습니다.$project&$unwind&$group결과를 요구사항에 더 가깝게 하기 위한 집계 프레임워크.

> db.countries.aggregate({$project:{a:'$data.country.neighbor.name'}},
                         {$unwind:'$a'},
                         {$unwind:'$a'},
                         {$group:{_id:'a',res:{$addToSet:'$a'}}})
  {
    "result" : [
        {
            "_id" : "a",
            "res" : [
                "Colombia",
                "Malaysia",
                "Switzerland",
                "Costa Rica",
                "Austria"
            ]
        }
    ],
    "ok" : 1
}

$unwind이름 배열이 중첩되어 있기 때문에 두 번 사용됩니다.그리고 그것은 오직 다음과 같은 경우에만 작동할 것입니다.neighbor특성이 배열입니다.이 예에서는 하나의 인접 필드(말레이시아)가 배열이 아닙니다.

훨씬 더 간단한 방법으로 수행했습니다. 아마도 최근일 것입니다.

db.countries.aggregate({$unwind:'$data.country.neighbor.name'})

데이터를 평탄화하기 위해 사용할 수도 있습니다.$reduce여기 문서의 예가 있습니다.

db.countries.aggregate([
  {
    $addFields: {
      newField: {
        $reduce: {
          input: "$data.country.neighbor.name",
          initialValue: [],
          in: { $concatArrays: ["$$value", "$$this"] }
        }
      }
    }
  }
])

새로운 통합 프레임워크에서는 매우 간단합니다.$project와 $unwind 작업이 목적에 맞습니다.

언급URL : https://stackoverflow.com/questions/13281733/is-it-possible-to-flatten-mongodb-result-query

반응형