我正在尝试$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
中的查找字段?
答案 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"' ] }
}}
输出是“总是”一个数组,即使它只有一个结果或很多甚至没有结果。因此,您需要使用适当的操作员来处理。