首页 > 解决方案 > 如何使用 mongodb 查询将 DB 中的元素与存储在同一集合中的数组中的另一个元素进行比较

问题描述

这是我的问题。

这是我的样本记录

{
    "_id" : ObjectId("5d9b69fae4757402b4b4ca0d"), 
    "status_changed_utc" : [
        {
            "status" : NumberInt(1), 
            "time" : ISODate("2019-05-20T23:03:10.000+0000")
        }, 
        {
            "status" : NumberInt(2), 
            "time" : ISODate("2019-05-23T23:04:03.000+0000")
        }, 
        {
            "status" : NumberInt(4), 
            "time" : ISODate("2019-05-23T23:05:06.000+0000")
        }, 
        {
            "status" : NumberInt(5), 
            "time" : ISODate("2019-05-23T23:05:07.000+0000")
        }, 
        {
            "status" : NumberInt(6), 
            "time" : ISODate("2019-05-23T23:05:09.000+0000")
        }
    ], 
    "requested_completion_utc" : ISODate("2019-05-22T23:05:09.000+0000")
},
{
    "_id" : ObjectId("5d9b69fae4757402b4b4ca1e"), 
    "status_changed_utc" : [
        {
            "status" : NumberInt(1), 
            "time" : ISODate("2019-06-20T23:03:10.000+0000")
        }, 
        {
            "status" : NumberInt(2), 
            "time" : ISODate("2019-07-23T23:04:03.000+0000")
        }, 
        {
            "status" : NumberInt(4), 
            "time" : ISODate("2019-07-23T23:05:06.000+0000")
        }, 
        {
            "status" : NumberInt(5), 
            "time" : ISODate("2019-05-23T23:05:07.000+0000")
        }, 
        {
            "status" : NumberInt(6), 
            "time" : ISODate("2019-07-23T23:05:09.000+0000")
        }
    ], 
    "requested_completion_utc" : ISODate("2019-08-22T23:05:09.000+0000")
},

当“status_changed_utc.status”为 NumberInt(2) 时,我希望找出“requested_completion_utc”字段的日期大于“status_changed_utc”字段的日期的记录。

在这个例子中,我希望得到第二条记录。

除了 $unwind 函数,还有其他方法可以处理这个问题吗?

谢谢

标签: mongodbmongodb-query

解决方案


如果NumberInt(2)总是在数组的第二个位置。这应该很容易。

db.whatever.find({ $expr: { $gt: [ "$requested_completion_utc" , "$status_changed_utc.1" ] } })

推荐阅读