MongoDB $ concat значения массива с другими полями? - PullRequest
1 голос
/ 16 марта 2019

Мне нужно сопоставить значения массива с некоторыми другими полями.

Дан следующий набор данных:

{
  _id: ObjectId("1234"),
  field1: "test1",
  field2: "test2",  
  collection2: ['apple', 'banana', "orange"]  
}

Я хочу этот результат:

{
  _id:ObjectId("1234")
  fruits:"test1 apple banana orange"
}

Я получил это до сих пор (на стадии $ project):

{
  'fruits': {
    '$concat': [
      '$field1', ' ',
      '$reduce': {
          'input': '$fruits',
          'initialValue': '',
          'in': {
              '$concat': [
                  '$$value',
                  {'$cond': [{'$eq': ['$$value', '']}, '', ' ']}, 
                  '$$this']
          }
      }
    ]
  }
}

Я не совсем понимаю, почему это не работает, любая идея?

Спасибо

1 Ответ

0 голосов
/ 16 марта 2019

Попробуйте что-то вроде ниже:

db.fruits.aggregate([
    {
        $project: {
            values: {
                $reduce: {
                    input: '$collection2',
                    initialValue: '',
                    in: {
                        $concat: ['$$value',' ','$$this']
                    }
                }
            },
            field1: 1
        }
    },
    {
        $project: {
            'fruits': { '$concat': [ '$field1', '$values'] }
        }
    }
    ])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...