如何获取猫鼬的数据在数组中的最后一个元素?

西尔维亚·祖林卡

如何获取猫鼬的数据在数组中的最后一个元素?我的数据看起来像这样:

[
    {
        "_id" : ObjectId("5b56eb3deb869312d85a8e69"),
        "transactionStatus" : [ 
            {
                "status" : "pending",
                "createdAt" : ISODate("2018-07-24T09:02:53.347Z")
            }, 
            {
                "status" : "process",
                "createdAt" : ISODate("2018-07-24T09:02:53.347Z")
            }
        ]
    },
    {
        "_id" : ObjectId("5b56eb3deb869312d8589765"),
        "transactionStatus" : [ 
            {
                "status" : "pending",
                "createdAt" : ISODate("2018-07-24T09:02:53.347Z")
            },
            {
                "status" : "process",
                "createdAt" : ISODate("2018-07-24T09:03:30.347Z")
            },
            {
                "status" : "done",
                "createdAt" : ISODate("2018-07-24T09:04:22.347Z")
            }
        ]
    }
]

而且,我想获取最后一个对象之上的数据transactionStatus.status = process,所以结果应该是:

{
    "_id" : ObjectId("5b56eb3deb869312d85a8e69"),
    "transactionStatus" : [ 
        {
            "status" : "pending",
            "createdAt" : ISODate("2018-07-24T09:02:53.347Z")
        }, 
        {
            "status" : "process",
            "createdAt" : ISODate("2018-07-24T09:02:53.347Z")
        }
    ]
}

用猫鼬怎么做?

米克尔

您可以在比赛中使用$ expr(MongoDB 3.6+)。使用$ let$ arrayElemAt-1作为第二个参数传递时,您可以将最后一个元素作为临时变量,然后可以比较这些值:

db.col.aggregate([
    {
        $match: {
            $expr: {
                $let: {
                    vars: { last: { $arrayElemAt: [ "$transactionStatus", -1 ] } },
                    in: { $eq: [ "$$last.status", "process" ] } 
                }
            }
        }
    }
])

使用$ addFields和,对于较低版本的MongoDB可以实现相同的结果$match您可以添加$project然后删除该临时字段:

db.col.aggregate([
    {
        $addFields: {
            last: { $arrayElemAt: [ "$transactionStatus", -1 ] }
        }
    },
    {
        $match: { "last.status": "process" }
    },
    {
        $project: { last: 0 }
    }
])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

仅获取数组猫鼬的最后一个元素

如何在猫鼬中获取最后一个记录的一个值

如何通过多种条件在数组中只找到一个 obj 猫鼬

如何获取Ruby中数组的最后一个元素?

猫鼬,获取元素在数组中的位置

如何获取另一个模型中定义的猫鼬数据库的架构

如何在猫鼬的一个查询中获取数据并进行计数

为什么猫鼬插入 null 作为子文档数组的最后一个元素?

使用猫鼬返回另一个对象数组中的最后一项

猫鼬在数组中查找元素

猫鼬。如何更新包含在另一个数组中的数组元素?

从猫鼬中另一个数组内部的数组中删除元素

如何使用猫鼬聚合获取嵌套在另一个数组中的数组大小

从猫鼬中的另一个数组匹配数组元素/元素(至少一个)

猫鼬-如何仅填充每个对象嵌套数组中的第一个元素

获取一个空数组猫鼬

猫鼬通过ObjectID从嵌套数组中拉出一个元素

如何使用解构获取数组的最后一个元素

获取Bash数组中的最后一个元素

从数组中获取每个元素的最后一个

设置条件时如何获取最后一个元素数组(删除重复数据)

获取数组的最后一个元素?

如何创建一个抽象函数来从猫鼬获取数据?

如何使用猫鼬填充获取另一个收集数据

如何在邮递员中获取json数组中的最后一个元素

如何使用golang获取mongodb中数组中的最后一个元素?

如何在猫鼬组中以数组的形式获取数据

如何获取MySQL JSON数组中的最后一个元素?

如何在Swift中获取数组的最后一个元素?