Сопоставить значение со значением внутри массива, используя агрегацию mongodb - PullRequest
0 голосов
/ 05 марта 2020

Иметь запись со значением в агрегации.

_id:asdgrsdv
surname:cooper,
comapany:sabesto,
salary:15748
mapped:Array
0:Object
  name:'mark',
  age:'25',
  surname:'cooper'
1:Object
  name:'snow',
  age:'29',
  surname:'wyte'

как отобразить surname снаружи с surname в mapped array, как это в агрегации mongodb

требуемый вывод:

_id:asdgrsdv
  name:'mark',
  comapany:sabesto,
  salary:15748
  age:'25',
  surname:'cooper'

1 Ответ

0 голосов
/ 05 марта 2020

Попробуйте это:

db.collection.aggregate([
  {
    $addFields: {
      data: {
        $mergeObjects: [
          "$$ROOT",
          {
            $arrayElemAt: [
              {
                $filter: {
                  input: "$mapped",
                  cond: {
                    $eq: [
                      "$$this.surname",
                      "$surname"
                    ]
                  }
                }
              },
              0
            ]
          }
        ]
      }
    }
  },
  {
    $replaceRoot: {
      newRoot: "$data"
    }
  },
  {
    $project: {
      "mapped": 0
    }
  }
])

MongoPlayground

...