doc*_*uke 5 mongodb aggregation-framework
我有以下文档进入我的聚合管道:
[
{
"email" : "email@example.com",
"name" : "Organization Name",
"users" : [
{
"lastName" : "Nye",
"firstName" : "Bill",
"email" : "bnye@example.com"
},
{
"lastName" : "Rogers",
"firstName" : "Mr.",
"email" : "mrrogers@example.com"
}
]
},
...
]
Run Code Online (Sandbox Code Playgroud)
使用$project我想要每个数组子文档中$concat的firstName和lastName字段来获得以下结果:
{
"email" : "email@example.com",
"name" : "Organization Name",
"users" : [
{
"name" : "Bill Nye",
"email" : "bnye@example.com"
},
{
"name" : "Mr. Rogers",
"email" : "mrrogers@example.com"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我尝试过以下聚合:
db.organizations.aggregate([
{
$project: {
email : 1,
name : 1,
users : {
name : { $concat : [ "$users.firstName", " ", "$users.lastName" ] },
email : 1
}
}
}
]);
Run Code Online (Sandbox Code Playgroud)
...但我收到以下错误:
$ concat只支持字符串,而不支持Array
我也尝试过以下聚合:
db.organizations.aggregate([
{
$project: {
email : 1,
name : 1,
users : {
name : { $concat : [ "$firstName", " ", "$lastName" ] },
email : 1
}
}
}
]);
Run Code Online (Sandbox Code Playgroud)
......但name总是回来null.
我觉得这应该是一个相对简单的事情,但是,我完全被难倒了.
如何获得我正在寻找的结果?
sty*_*ane 10
您只需通过$project文档执行此$map操作,然后使用聚合变量运算符将$concat表达式应用于数组中的每个项目,并返回包含应用结果的数组.
db.organizations.aggregate(
[
{ "$project": {
"email": 1,
"name": 1,
"users": {
"$map": {
"input": "$users",
"as": "u",
"in": {
"name": { "$concat" : [ "$$u.firstName", " ", "$$u.lastName" ] },
"email": "$$u.email"
}
}
}
}}
]
)
Run Code Online (Sandbox Code Playgroud)