在 Sails.JS Waterline 中使用完整日期格式查询

Using between query for full date format in Sails.JS Waterline

根据 可以在 Waterline 适配器中对日期进行查询,如下所示:

User.find({
    createdAt: { '>': dateFrom, '<': dateTo }
}).exec(/* ... */);

但是,这仅适用于 2018-04-11 等日期格式。 是否有可能在此查询中使用完整的 ISO8601 日期格式:例如2018-04-11T12:45:00.000Z?

编辑:添加了最小的工作示例代码。

readDataInDateRange: function(req, res) {
    var dateFrom = req.param("dateFrom");
    if (dateFrom == null || dateFrom == ''){
        return res.badRequest();
    }
    var dateTo = req.param("dateTo");
    if (dateTo == null || dateTo == ''){
        return res.badRequest();
    }
    User.find({createdAt: { '>=': dateFrom, '<=': dateTo}})
    .exec(function afterwards(err, users) {
        if (err) {
            sails.log(err);
            return res.serverError(err);
        }
        return res.ok(users);
    });
}

如果您将 mongodbCLI 一起使用,实际上可能会使用

    $gt

显示所有值大于特定值的运算符。这里我们在 sails.js 中有语法显示 Query Language 和详细信息。

磨碎相等运算符

我们可以使用条件显示所有数据的基本示例类似于下面的代码。

    Model.find({ age: { '<=': 20 }})

更大的相等运算符

在您的情况下,我们主要按日期时间模式进行过滤。

    Model.find({
          where: {
            date: {
              '<=': new Date('2018-08-24T14:56:21.774Z')
            }
          }
        });

时间 '2018-08-24T14:56:21.774Z' 是示例,您可以将所有 ISOformat 时间放在这里。

时间的大于等于运算符

如果数据库中的数据具有 时间戳 格式,您需要将查询更改为数字而不是日期时间格式

    Model.find({
          where: {
            createdAt: {
              '<=': new Date('2018-08-24T14:56:21.774Z').getTime()
            }
          }
        });

Date 是全局对象 JavaScript 可以实例化并创建新时间 class。用.getTime()可以生成时间戳。

其他两个时间之间的查询时间

或者如果开发人员想要在两次之间收集数据,我建议使用以下正确的语法。

    Model.find({
          where: {
            updatedAt: {
              '>': new Date('2018-08-21T14:56:21.774Z').getTime(),
              '<': new Date('2018-08-25T14:56:21.774Z').getTime()
            }
          }
        });

都检查过了,不用担心改错! ;)