MongoDB: агрегирование, массив объектов в строковое значение - PullRequest
1 голос
/ 07 августа 2020

Мой вопрос очень похож на: MongoDB Aggregation объединяет массив строк в одну строку , но вместо чистого массива, например: ['Batman', 'Robin'] У меня есть массив объектов:

_id: 1,
field_value: [
  {
    _id: 2,
    name: "Batman"
  },
  {
    _id: 3,
    name: "Robin"
  }
]

Я пытаюсь использовать $reduce, но вместо этого получаю ошибку.

Я хочу получить следующий результат:

  _id: 1,
  field_value: "Batman, Robin" /** <= String value */

или хотя бы массив свойств значения:

  _id: 1,
  field_value: ["Batman", "Robin"] /** <= Array of strings (name property) */

My Пример данных MongoPlayground

1 Ответ

1 голос
/ 07 августа 2020

Вам нужен тот же подход с $reduce, $$this представляет собой одну field_value сущность, поэтому вам нужно $$this.name:

db.collection.aggregate([
    {
        $project: {
            field_value: {
                $reduce: {
                    input: "$field_value",
                    initialValue: "",
                    in: {
                        $concat: [
                            "$$value",
                            { $cond: [ { $eq: [ "$$value", "" ] }, "", "," ] },
                            { $toString: "$$this.name" }
                        ]
                    }
                }
            }
        }
    }
])

Mon go Playground

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