Способ получения даты последней недели может повлиять на результат. Предположим, что сегодняшняя дата 24-Mar-2020
, и у меня есть следующие документы, из которых можно выбрать данные за последнюю неделю (при условии, что сегодня включает в себя данные недель):
{ "_id" : 1, "createdOn" : ISODate("2020-03-21T12:05:00Z") }
{ "_id" : 3, "createdOn" : ISODate("2020-03-24T01:56:00Z") }
{ "_id" : 99, "createdOn" : ISODate("2020-03-15T12:05:00Z") }
{ "_id" : 991, "createdOn" : ISODate("2020-03-18T00:05:00Z") }
Следующий запрос следует выбрать документы с помощью _id
s 1
, 3
и 991
. Вот код:
const coll = db.collection('collection');
const today = new Date();
const ymdStr = today.getFullYear() + "-" + (today.getMonth() + 1 ) + "-" + today.getDate();
const TODAY_MINUS_7_A = new Date(Date.parse(ymdStr) - (7 * 24 * 60 * 60 * 1000));
const TODAY_MINUS_7_B = new Date(new Date() - (7*24*60*60*1000));
console.log("TODAY_MINUS_7 A, B", TODAY_MINUS_7A, TODAY_MINUS_7B);
const matchStage = { $match: { createdOn: { $gte: TODAY_MINUS_7A } } };
col.aggregate( [matchStage] ).toArray( ( err, docs ) => {
console.log("Aggregation output:");
console.log( JSON.stringify( docs ) );
// ...
На этапе $match
попробуйте ввести TODAY_MINUS_7A
и TODAY_MINUS_7B
и посмотрите результаты. Результаты могут не совпадать все время (и это зависит от того, в какое время вы запускаете приложение). Иногда документ с _id: 991
может быть выбран , а не , если вы используете TODAY_MINUS_7B
.