【问题标题】:Mongoose update by date without time猫鼬按日期更新,没有时间
【发布时间】:2017-04-29 22:12:59
【问题描述】:

我正在使用 mongoose 4.7.x 和 mongodb 3.2。我想搜索所有没有时间的日期。例如update all obj with this date 2016-12-14。

在我的数据库中,我有多个这样的日期时间:

2016-12-14 00:00:00.000Z
2016-12-14 00:00:00.000Z

2016-12-14 01:00:00.000Z
2016-12-14 01:00:00.000Z

2016-12-14 02:00:00.000Z
2016-12-14 02:00:00.000Z

我试过这个:

var query = {date: new Date('2016-12-14')};
var doc = {name: 'TEST'};
var options = {multi: true};

Model.update(query, doc, options, function(err, result){
    console.log('All data updated')
});

但这只会更新时间为 00:00:00 的所有字段,因为 new Date() 将返回日期时间。

如何在没有时间的情况下搜索具有特定日期的所有字段?如果需要,我可以更改模型。

【问题讨论】:

    标签: javascript node.js mongodb date mongoose


    【解决方案1】:

    您可以在一系列日期之间执行此操作。将$gte 用于较低的范围,$lt 用于较高的范围(即第二天),以防止它选择第二天的 00:00:00。

    var query = {
        date: {
            $gte: new Date('2016-12-14'),
            $lt: new Date('2016-12-15')
        }
    };
    var doc = {name: 'TEST'};
    var options = {multi: true};
    
    Model.update(query, doc, options, function(err, result){
        console.log('All data updated')
    });
    

    2016-12-14 00:00:00.000Z 和 2016-12-14 23:59:59.999Z 之间的所有文档都将更新。

    【讨论】:

    • 哦,我不知道$gte 和$lt。这太酷了。非常感谢@Ron!
    • 你知道如何在我的数据库中找到双字段吗?我试过了,但它什么也没给我:db.getCollection('Model').find({longitude: 354.049987792969})
    • 据此stackoverflow.com/a/35482037/4908482mongoose不支持double开箱即用并将其转换为字符串,所以不妨尝试像这样过滤:db.getCollection('Model').find({longitude: '354.049987792969'})
    猜你喜欢
    • 2016-04-08
    • 2021-01-03
    • 2017-03-12
    • 2020-12-14
    • 1970-01-01
    • 2018-10-28
    • 2020-07-13
    • 2013-01-14
    相关资源
    最近更新 更多