2016-01-18 2 views
1

Я хочу найти всех пользователей, которые создали до вчера. Это мой код, чтобы сделать строку запроса:Mongoose.js найти вчерашнюю дату в базе данных

var today = new Date(); 
var a = today.getDate(); 
a--; 
today.setDate(a); 
var yesterday = today.toDateString(); 

и возвращает что-то вроде: Sun Jan 17 2016 ... что вчерашняя дата, но БД хранит даты в формате изопропилового как: "date" : ISODate("2016-01-13T13:23:08.419Z") так, что я get is 2016-01-13T13:23:08.419Z. Моя проблема в том, что я не могу использовать вчерашнюю переменную для запроса db для пользователей, которые мне нужны. И даже если бы я мог, я не знаю, как найти каждую регистрацию, не считая тех, которые были сегодня.

Любая помощь? Большое спасибо!

ответ

1

Вы генерируете дату на переднем конце, а затем толкая его обратно в день, что является совершенно нормально для многих обстоятельств -

Для этого, так как вы пытаетесь найти записи из базы данных, что произошло, возможно, попробуйте запросить базу данных с временной шкалой, оттянутой от идентификаторов каждого документа в вашей базе данных.

Ниже приведена документация о том, как это сделать от mongoDB. https://docs.mongodb.org/v3.0/reference/method/ObjectId.getTimestamp/

Я также предоставил некоторые дополнительные ресурсы, которые могут помочь вам понять, что именно нужно запросить в связи с этим способом:

https://steveridout.github.io/mongo-object-time/

https://gist.github.com/tebemis/0e55aa0089e928f362d9

Некоторые псевдо-код:

1. Query documents in the database 
2. Get a timestamp from the ID's of the documents in the database 
3. Set a range of the timestamps 
4. Compare returned timestamps vs a timestamp range variable (yesterdays date in this case) 
5. Have the DB return only documents that are within the range 

Надеюсь, это поможет!

0

Создать объект даты, который представляет собой начало дня сегодня, использовать его для запроса вашей коллекции документов, где date поле меньше этой переменной, как показано в следующем примере

var start = new Date(); 
start.setHours(0,0,0,0); 

db.users.find({ "date": { "$lt": start }}); 

Это будет искать пользователей, созданных до конца дня вчера.

momentjs - это супер удобная утилита для таких манипуляций. Использование библиотеки, это может быть достигнуто с помощью startOf() метода на текущий объект даты в тот момент, передавая строку 'day' в качестве аргументов:

Местный GMT:

var start = moment().startOf('day'); // set to 12:00 am today 
db.users.find({ "date": { "$lt": start }}); 

For UTC:

var start = moment.utc().startOf('day'); 
1

Попробуйте это, используя Moment.js:

yesterday = moment().add(-1, 'days'); 
db.users.find({ "date": { "$lt": yesterday }}); 
Смежные вопросы