是否可以忽略日期并仅检查此猫鼬聚合中的时间?

is it possible to ignore date and check only time in this mongoose aggregate?

我正在尝试搜索两个时间范围之间的时间,忽略日期(年、日、月),仅时间无关紧要

我自己能够达到这一点,但无法找到任何解决方案来仅考虑时间,除非我更改架构

StoreModel.aggregate([
      { $unwind: { path: "$practitioners" } },
      {
        $match: {
          _id: new Types.ObjectId(storeId),
          "practitioners._id": new Types.ObjectId(practitionerId),
        },
      },
      {
        $project: {
          _id: false,
          timings: "$practitioners.schedule.timings",
        },
      },
      {
        $set: {
          dateInTimings: {
            $let: {
              vars: {
                my_date: date,
              },
              in: {
                $reduce: {
                  input: "$timings",
                  initialValue: false,
                  in: {
                    $cond: [
                      { $not: ["$$value"] },
                      {
                        $and: [
                          {
                            $gte: ["$$my_date", "$$this.from"],
                          },
                          {
                            $lte: ["$$my_date", "$$this.to"],
                          },
                        ],
                      },
                      "$$value",
                    ],
                  },
                },
              },
            },
          },
        },
      },
    ]);

查询

  • 使用$hour,$minute,$seconds忽略year/month/day
  • 比较 [hours1,minutes1,milliseconds1] > [hours2,minutes2,milliseconds2] 它将比较两个日期的成员从左到右

*我认为这是一种仅比较 2 个日期的时间的方法,但也许存在更快或更简单的方法

Playmongo

aggregate(
[{"$set":{"date1":ISODate("2022-05-17T22:50:44.501Z")}},
 {"$set":{"date2":ISODate("2022-05-17T22:49:44.501Z")}},
 {"$set":
   {"date1Bigger":
     {"$gt":
       [[{"$hour":"$date1"}, {"$minute":"$date1"},
           {"$millisecond":"$date1"}],
         [{"$hour":"$date2"}, {"$minute":"$date2"},
           {"$millisecond":"$date2"}]]}}}])