如何根据 MongoDB 中的字段值查找日期差异?

How do I find date difference based on a field value in MongoDB?

我想在 collection 中查找日期差异,但对于匹配给定条件的 objects。 关于如何实现这一目标的任何线索。

目前,我正在使用查询:

db.sales.aggregate([ {
    $project: {
       item: 1,
       dateDifference: {
          $subtract: [ "$enddate", "$startdate" ]
       }
    }
} ])

但这将 return 我在 collection 中所有 objects 的日期差异。

我想说我有一个项目字段,并且有多个项目,比如汽车、自行车、自行车等。现在我只想要基于项目值的日期差异。

假设我们在 collection 中有 4 个会话,其属性如下:

[
  {
    _id: "112233",
    item: "CAR",
    startdate: ISODate("2022-03-16T07:38:08.466Z"),
    enddate: ISODate("2022-03-16T08:38:08.466Z")
  },
  {
    _id: "11222333",
    item: "BIKE",
    startdate: ISODate("2022-02-16T07:38:08.466Z"),
    enddate: ISODate("2022-02-14T08:38:08.466Z")
  },
  {
    _id: "1122333243",
    item: "CAR",
    startdate: ISODate("2022-01-16T07:38:08.466Z"),
    enddate: ISODate("2022-02-16T01:38:08.466Z")
  },
  {
    _id: "12312233",
    item: "BUS",
    startdate: ISODate("2021-03-16T07:38:08.466Z"),
    enddate: ISODate("2021-03-16T08:38:08.466Z")
  }
]

现在我只想找出 CAR 的开始日期和结束日期的区别。

使用$expr and $dateDiff

db.collection.aggregate([
  {
    $match: {
      $expr: {
        $gt: [
          {
            $dateDiff: {
              startDate: "$startdate",
              endDate: "$enddate",
              unit: "minute"
            }
          },
          20
        ]
      }
    }
  }
])

mongoplayground


db.collection.aggregate([
  {
    $match: {
      item: "CAR"
    }
  },
  {
    $set: {
      diff: {
        $dateDiff: {
          startDate: "$startdate",
          endDate: "$enddate",
          unit: "day"
        }
      }
    }
  }
])

mongoplayground