Вернуть ключи поля массива из MongoDB - PullRequest
1 голос
/ 13 апреля 2020

Ниже приведен пример данных коллекции mongodb. Я пытаюсь запустить запрос, который вернет и массив свойства в моей коллекции.

Образцы документов:

{
    "_id" : ObjectId("5e940d6c2f804ab99b24a633"),
    "accountId" : ObjectId("7e1c1180d59de1704ce43557"),
    "description":"some desc",
    "configs": {},
    "dependencies" : [ 
        {
            "commute" : {},
            "distance" : {},
            "support":{}
        }
    ]
}

Ожидаемый результат:

{
    [0]:commute
    [1]:distance
    [2]:support
}

Я попытался получить ответ и выполнить итерацию объекта зависимостей, а также попытался с помощью es6 преобразовать его в объект массива. Но это дорогостоящая операция, так как этот список будет очень большим. Если вообще существует и такой подход в Mon go для преобразования ответа в массив

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Вы можете попробовать запрос агрегации ниже:

db.collection.aggregate([
  {
    $project: {
      _id: 0,
      dependenciesKeys: {
        $reduce: {
          input: "$dependencies", // Iterate over 'dependencies' array
          initialValue: [],
          in: {
            $concatArrays: [ /** concat each array returned by map with holding 'value */'
              "$$value",
              {
                $map: {
                  input: {
                    $objectToArray: "$$this" /** Convert each object in 'dependencies' to array [{k:...,v:...},{k:...,v:...}] & iterate on each object */
                  },
                  in: "$$this.k" // Just return keys from each object
                }
              }
            ]
          }
        }
      }
    }
  }
])

Тест: MongoDB-Playground

Ссылка: $ уменьшить , $ map , $ concatArrays , $ objectToArray & $ project

0 голосов
/ 13 апреля 2020

Я думаю, вам следует попробовать Объект в массив , который является оператором конвейера агрегации.

Также Агрегационный конвейер - довольно полезная концепция, она заставляет вас создавать конвейер операций, которые обрабатывают ваши данные последовательно. Вы можете представить это следующим образом; вы создаете этапы «Конвейер», каждый шаг выполняет определенную операцию «Агрегирование» в ваших данных, которая приводит к некоторой определенной форме данных, такой как массив, как вы хотите.

...