无法按日期/时间在水线中查找记录

时间:2014-05-07 19:55:07

标签: node.js mongodb sails.js mean-stack waterline

如何比较sails.js模型中的日期时间?这就是我所做的,但没有运气。

var _date = moment().format('YYYY-MM-DDTHH:mm:ss.SSS') + 'Z';
Game.find({
    where:{
        active: true,
        start: {
            '>=' : _date
        }
    },
    limit: 1,
    sort: 'start asc'
}, function(err, game) {
    console.log('ERROR: ' + err);
    console.log('Game OBJ' + game.toString());
});

2 个答案:

答案 0 :(得分:4)

datetime类型转换为Waterline中的实际Javascript日期(Sails ORM)。因此需要将其与日期对象进行比较,而不是字符串。您可以完全保持代码的原样,但将第一行更改为:

var _date = new Date(moment().format('YYYY-MM-DDTHH:mm:ss.SSS') + 'Z');

然后您的查询应该找到将来开始的所有Game

当然,由于您的代码只是返回当前日期,因此您根本不需要moment

var _date = new Date();

也会起作用。

答案 1 :(得分:1)

var _date = moment().format('YYYY-MM-DDTHH:mm:ss.SSS') + 'Z';

您需要使用以下行

将上述字符串变量转换为日期变量
var tempDate = new Date(_date);

现在使用$ gte而不是'> ='

Game.find({
    where:{
        active: true,
        start: {
            $gte : tempDate 
        }
    },
    limit: 1,
    sort: 'start asc'
}, function(err, game) {
    console.log('ERROR: ' + err);
    console.log('Game OBJ' + game.toString());
});

您还可以使用$ gt,$ lt,$ lte。