MongoDB $lt日期比较不起作用

9njqaruj  于 12个月前  发布在  Go
关注(0)|答案(1)|浏览(123)

我有MongoDB聚合管道,它应该与当前日期进行比较,但时间为“T00:00:00.000+00:00”。所以,我尝试做下面的操作,第二阶段是给我正确的日期“<Current_Date>T00:00:00.000+00:00”。但是$lt仍然没有返回任何数据。

[
  {
    $addFields: {
      formattedDate: {
        $dateToString: {
          format: '%Y-%m-%d',
          date: '$$NOW'
        }
      }
    }
  }, 
  {
    $set: {
      formattedDate: {
        $toDate: '$formattedDate'
      }
    }
  }, 
  {
    $match: {
      effectiveFrom: {
        $lt: '$formattedDate'
      },
      createdDate: {
        $lt: '$formattedDate'
      }
    }
  }
]
6yt4nkrj

6yt4nkrj1#

请注意,除非使用$expr运算符,否则无法比较文档中的两个字段。
另外,如果您认为包含effectiveFrom:2023-09-22T00:00:00.000+00:00的文档将包含在结果中,则应该使用$lte而不是$lt
而你尝试获取当前日期而不带时间的方式可以用$dateTrunc运算符来简化。

db.collection.aggregate([
  {
    $addFields: {
      formattedDate: {
        $dateTrunc: {
          date: "$$NOW",
          unit: "day"
        }
      }
    }
  },
  {
    $match: {
      $expr: {
        $and: [
          {
            $lte: [
              "$effectiveFrom",
              "$formattedDate"
            ]
          },
          {
            $lt: [
              "$createdDate",
              "$formattedDate"
            ]
          }
        ]
      }
    }
  }
])

Demo @ Mongo Playground

相关问题