2016-12-14 2 views
0

Я использую mongoose 4.7.x и mongodb 3.2. Я хочу искать всю дату без времени. Например, update all obj with this date 2016-12-14.Mongoose обновление по дате без времени

В моей базе данных у меня есть несколько DateTime как это:

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() воля возвращается дата и время.

Как я могу выполнить поиск по всем полям с определенной датой без времени? Я могу изменить модель, если это необходимо.

ответ

4

Вы можете сделать это между различными датами. Используйте $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 будут обновлены.

+0

О, я не знал '$ gte' и' $ lt'. Это так классно. Спасибо вам большое @Ron! – John

+1

Добро пожаловать, рад, что это помогло :) –

+0

Вы знаете, как я могу найти двойное поле в моей базе данных? Я попробовал это, но ничего не вернет: 'db.getCollection ('Model'). Find ({longitude: 354.049987792969})' – John

Смежные вопросы