从对象中提取字段而不$project两次MongoDB



好吧,也许这是一个简单的问题,但我在mongoDB文档中没有找到任何关于聚合框架的满意答案。

如果我执行查找并生成匹配文档数组,我如何仅投影最后一个元素的字段?

db.collection.aggregate([
{
$lookup: {
.... some lookup pipeline ....,
as: "matchedObjects"
}
},
{
// Here I get the last Object
$project: {
doc:  { $arrayElemAt: [ { $slice: ["$matchedObjects", -1 ] }, 0 ]}
}
},
{      
// extract what I want
$project: {
field:  "$doc.field"
}
}
])

好吧,我如何仅用第一个$project做到这一点

您可以使用$let捕获临时变量中的最后一个元素,然后引用该变量以获取field

db.collection.aggregate([
{
$project: {
field: {
$let: {
vars: { doc:  { $arrayElemAt: [ { $slice: ["$matchedObjects", -1 ] }, 0 ]} },
in: "$$doc.field"
}
}
}
}
])

最新更新