是否有任何方法可以在一个$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游乐场