【问题标题】:Get rows by comparing field dates in mongo db通过比较mongodb中的字段日期获取行
【发布时间】:2022-07-08 04:55:14
【问题描述】:

我正在尝试比较集合 mongo 本身的两个字段以获取行,但无法获取它。

[{
    "date_created" : ISODate("2022-06-24T05:01:15.370+0000"),
    "date_modified" : ISODate("2022-06-29T05:01:15.370+0000"),
},
{
    "date_created" : ISODate("2022-06-24T05:01:15.370+0000"),
    "date_modified" : ISODate("2022-06-19T05:01:15.370+0000"),
},
{
    "date_created" : ISODate("2022-06-24T05:01:15.370+0000"), 
}]

查询

db.getCollection("collection_name").aggregate([ 
             {
                $match: {
                 status: '1',
                      $or: [
                          {
                              date_modified: { $gt: ISODate('$date_created') } 
                          },
                          { 
                             date_modified: {
                                 "$exists": false,
                            },
                           },
                       ], 
                }, 
            },
]);

预期结果:

[{
    "date_created" : ISODate("2022-06-24T05:01:15.370+0000"),
    "date_modified" : ISODate("2022-06-29T05:01:15.370+0000"),
},{
    "date_created" : ISODate("2022-06-24T05:01:15.370+0000"), 
}]

当前结果: date_created 未定义

【问题讨论】:

    标签: database mongodb mongodb-query nosql


    【解决方案1】:

    您需要使用$expr 进行字段之间的比较。使用$ifNull 来满足您检查date_created 字段是否存在的要求。

    db.collection.find({
      $expr: {
        $or: [
          {
            $eq: [
              {
                $ifNull: [
                  "$date_modified",
                  null
                ]
              },
              null
            ]
          },
          {
            $gt: [
              "$date_modified",
              "$date_created"
            ]
          }
        ]
      }
    })
    

    这里是Mongo Playground 供您参考。

    【讨论】:

      猜你喜欢
      • 2013-09-29
      • 2013-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多