Преобразовать объект массива в простой массив mongodb - PullRequest
1 голос
/ 11 июля 2019

У меня есть пример этого симплексного массива на этапе

equipaments: [
  {id: 1, number: 1029393, card: 12333},
  {id: 2, number: 1029394, card: 12334},
  {id: 3, number: 1029395, card: 12335}
]

Я хотел бы получить этот вывод в проекте

['1029393-12333', '1029394-12334', '1029395-12335']

Я пытаюсь что-то вроде этого

{$project: {
  'equipaments': {
    $reduce: {
      input: '$eqp',
      initialValue: [],
      in: {
        $concat: ['$$eqp.number', '-', '$$eqp.card']
      }
    }
  }
}}

1 Ответ

2 голосов
/ 12 июля 2019

В этом случае вы должны использовать $map вместо $reduce для преобразования каждого элемента в массиве. Синтаксис очень похож:

db.collection.aggregate([
  {
    $project: {
      "equipaments": {
        $map: {
          input: "$equipaments",
          as: "eqp",
          in: {
            $concat: [
              {
                $toString: "$$eqp.number"
              },
              "-",
              {
                $toString: "$$eqp.card"
              }
            ]
          }
        }
      }
    }
  }
])

если number и card хранятся как Int / Long / Double, вам нужно будет преобразовать их в строку раньше. Обратите внимание, что для оператора $toString требуется MongoDB 4.0

вывод:

[
  {
    "_id": ObjectId("5a934e000102030405000000"),
    "equipaments": [
      "1029393-12333",
      "1029394-12334",
      "1029395-12335"
    ]
  }
]

попробуйте онлайн: mongoplayground.net / p / u9FrF-OfdDf

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