$ concat два поля в mongodb - PullRequest
       7

$ concat два поля в mongodb

0 голосов
/ 14 сентября 2018

У меня есть две коллекции:

employees :  {_id: NumberInt(0), name:"Max",surname:"Power"}, ..

и

loggableUser:{_id: NumberInt(0), employee: NumberInt(1), ..},

Теперь мне нужно вставить в следующий запрос поле "fullName", содержащее "employee.name" + "" + "employee.surname". Я пробовал этот запрос:

db.loggableUser.aggregate([
    {
      '$lookup':
      {
        'from': 'employees',
        'localField': 'employee',
        'foreignField' : '_id',
        'as': 'employee'
      }
    },
    { "$addFields":{ 
         "$employee.fullName" : "$employee.name" + " " + "$employee.surname"}])

но это не работает. Я знаю, что это простая вещь, но я не могу заставить ее работать. Спасибо.

1 Ответ

0 голосов
/ 14 сентября 2018

Сначала необходимо $unwind employee, затем вы можете использовать $concat для объединения двух полей.

db.loggableUser.aggregate([
  { '$lookup': {
    'from': 'employees',
    'localField': 'employee',
    'foreignField' : '_id',
    'as': 'employee'
  }},
  { '$unwind': '$employee' },
  { '$addFields': { 
    'employee.fullName' : { '$concat': ['$employee.name' + ' ' + '$employee.surname'] }
  }}
])

Что гораздо проще с mongodb 3.6 и выше $lookup синтаксис.

db.loggableUser.aggregate([
  { '$lookup': {
    'from': 'employees',
    'let': { 'employee': '$employee' },
    'pipeline': [
      { '$match': { '$expr': { '$eq': ['$_id', '$$employee'] }}},
      { '$addFields': { 'fullName' : { '$concat': ['$name', ' ', '$surname'] }}}
    ]
    'as': 'employee'
  }}
])
...