$project:是否可以在一个阶段中访问表达式结果的属性



是否有任何方法可以在一个$project阶段中执行以下操作?

db.getCollection('users').aggregate([
{
$project : {
firstEmail : { $arrayElemAt : ["$emails", 0] }
}
},
{
$project : {
domain : "$firstEmail.domain"
}
}
])

您需要$let运算符:

db.getCollection('users').aggregate([
{
$project : {
domain : {
$let: {
vars: { firstEmail: { $arrayElemAt : ["$emails", 0] } },
in: "$$firstEmail.domain"
}
}
}
}
])

Mongo游乐场

使用对象数组时,可以使用点表示法自动获取对象数组的属性。因此,以下将完美工作:

db.getCollection('users').aggregate([
{
$project : {
domain: { $arrayElemAt : ["$emails.domain", 0] }
}
}, 
])

Mongo游乐场

最新更新