两次从没有$ project的对象中提取字段MongoDB

时间:2018-07-04 17:27:38

标签: mongodb aggregation-framework

好吧,也许这是一个简单的问题,但是我在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

1 个答案:

答案 0 :(得分:1)

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

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