好吧,也许这是一个简单的问题,但是我在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
答案 0 :(得分:1)
您可以使用$let捕获临时变量中的最后一个元素,然后引用该变量以获取field
:
db.collection.aggregate([
{
$project: {
field: {
$let: {
vars: { doc: { $arrayElemAt: [ { $slice: ["$matchedObjects", -1 ] }, 0 ]} },
in: "$$doc.field"
}
}
}
}
])