Mongodb中的正则表达式用于ISO日期字段

时间:2017-05-16 09:03:43

标签: regex mongodb

尽管有日期值,我如何选择时间值为00:00:00的所有日期?正则表达式对我不起作用。

{
    "_id" : ObjectId("59115a92bbf6401d4455eb21"),
    "name" : "sfdfsdfsf",
    "create_date" : ISODate("2013-05-13T02:34:23.000Z"),
}

类似的东西:

db.myCollection.find({"create_date": /*T00:00:00.000Z/ })

2 个答案:

答案 0 :(得分:1)

您需要先将创建的日期转换为时间字符串,如果时间是00:00:00:000,则包含该文档。

db.test.aggregate([
  // Part 1: Project all fields and add timeCriteria field that contain only time(will be used to match 00:00:00:000 time)
  {
    $project: {
      _id: 1,
      name: "$name",
      create_date: "$create_date",
      timeCriteria: {
        $dateToString: {
          format: "%H:%M:%S:%L",
          date: "$create_date"
        }
      }
    }
  },
  // Part 2: match the time
  {
    $match: {
      timeCriteria: {
        $eq: "00:00:00:000"
      }
    }
  },
  // Part 3: re-project document, to exclude timeCriteria field.
  {
    $project: {
      _id: 1,
      name: "$name",
      create_date: "$create_date"
    }
  }
]);

答案 1 :(得分:0)

从 MongoDB 版本 >= 4.4 开始,我们可以使用 $function 运算符编写自定义过滤器。

注意:不要忘记根据您的要求更改时区。时区不是强制性的。

let timeRegex = /.*T00:00:00.000Z$/i;

db.myCollection.find({
  $expr: {
    $function: {
      body: function (createDate, timeRegex) {
        return timeRegex.test(createDate);
      },
      args: [{ $dateToString: { date: "$create_date", timezone: "+0530" } }, timeRegex],
      lang: "js"
    }
  }
});