Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从没有$project的对象中提取字段MongoDB_Mongodb_Aggregation Framework - Fatal编程技术网

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

从没有$project的对象中提取字段MongoDB,mongodb,aggregation-framework,Mongodb,Aggregation Framework,嗯,也许这是一个简单的问题,但我在mongoDB文档中没有找到任何关于聚合框架的满意答案 如果我执行的查找会产生一个匹配文档的数组,那么我如何仅投影最后一个元素的字段 db.collection.aggregate([ { $lookup: { .... some lookup pipeline ...., as: "matchedObjects" } }, { // Here

嗯,也许这是一个简单的问题,但我在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来实现这一点,您可以使用它捕获临时变量中的最后一个元素,然后引用该变量以获取
字段

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

谢谢,成功了。我没想过这样用$let