Как получить доступ к ключам внутри объекта, имя которого является динамическим в MongoDB - PullRequest
0 голосов
/ 28 июня 2018
{
  "_id": "1",
  "Continent": "Asia",
  "Countries": {
    "South Korea": {
      "GDP": 80,
      "HGI": 60,
      "FX": 10
    },
    "India": {
      "GDP": 75,
      "HGI": 112,
      "FX": 28
    },
    "Singapore": {
      "GDP": 34,
      "HGI": 60,
      "FX": 0
    }
  }
}

У меня есть вышеуказанный JSON. Необходимо получить доступ к полям GDP и HGI. Но название страны меняется в зависимости от континента. Как создать единый запрос, по которому я могу получить доступ к ВВП и HGI? Возможно ли что-то наподобие ссылки на положение ключа внутри объекта? Я не могу преобразовать это в массив. Необходимо извлечь данные только из этого формата.

Спасибо !!!! * * 1004

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Как только вы получите все страны континента, вы можете обработать данные с помощью небольшого трюка, т.е.

 {
   "_id": "1",
   "Continent": "Asia",
   "Countries": {
     "South Korea": {
       "GDP": 80,
       "HGI": 60,
       "FX": 10
     },
     "India": {
       "GDP": 75,
       "HGI": 112,
       "FX": 28
     },
     "Singapore": {
       "GDP": 34,
       "HGI": 60,
       "FX": 0
     }
   }
 }

сверху можно легко получить Страны. Теперь,

Object.keys(data.Countries);

это вернет вам все страны в массиве, т. Е. ["Южная Корея", "Индия", "Сингапур"]. Теперь вы можете легко получить доступ ко всем данным конкретной страны, используя эти ключи.

0 голосов
/ 28 июня 2018

Вы можете достичь этого с оператором $objectToArray

Запрос будет выглядеть так:

db.collection.aggregate([
  {
    "$project": {
      "countries": {
        "$objectToArray": "$Countries"
      }
    }
  },
  {
    "$project": {
      "countries.v.GDP": 1
    }
  }
])

Результаты:

[
  {
    "_id": "1",
    "countries": [
      {
        "v": {
          "GDP": 80
        }
      },
      {
        "v": {
          "GDP": 75
        }
      },
      {
        "v": {
          "GDP": 34
        }
      }
    ]
  }
]

Вы можете попробовать это здесь: mongoplayground.net / p / 1ODRczeV-0S

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...