$ concat查找字段?

时间:2018-06-01 09:34:22

标签: mongodb aggregation-framework

我正在尝试$concat MongoDB聚合中的某些字段。问题是它们来自$lookup,显然它们不能像这样连接起来。这是我正在尝试的:

    {
        $lookup: {
            from: 'users',
            localField: 'user_id',
            foreignField: '_id',
            as: 'user'
        }
    },
    {
        $project: {
            'fullname': { $concat: ['$user.lastname', ', ', '$user.firstname' ] }
        }
    }

这会导致以下错误消息:

$concat only supports strings, not array

有趣的是,如果我使用$concatArrays,则消息将为:

$concatArrays only supports arrays, not string

那么如何引用$concat中的查找字段?

1 个答案:

答案 0 :(得分:1)

这是因为user是来自$lookup

的数组

当您知道只有1个结果时使用$arrayElemAt

{ "$project": {
  "fullname": {
    "$let": {
      "vars": { "user": { "$arrayElemAt": ["$user",0] },
      "in": { "$concat": [ "$$user.lastname", ", ", "$$user.firstname" ] }
    }
  }
}}

如果您有多个人,则只需$unwind

  { "$unwind": "$user" },
  { "$project": {
    "fullname": { "$concat": [ "$user.lastname", ", ", "$user.firstname"' ] }
  }}

输出是“总是”一个数组,即使它只有一个结果或很多甚至没有结果。因此,您需要使用适当的操作员来处理。