2016-01-06 3 views
1

В моих документах есть поле с типом даты, как показано ниже.Запрос mongodb для получения документов в течение двух диапазонов дат

{ 
    "_id" : ObjectId("568bae0fcfe23a50879d45fc"), 
    "data": { 
      "createdDate" : ISODate("2015-12-17T22:25:24.973+0000") 
    } 
} 

, как я могу получить все документы, где data.createdDate < = todayDate и data.createdDate> = todayDate-20days.

Я попытался с нижеследующим запросом, который работает нормально.

db.myTable.aggregate([ 
    {$match: {"data.createdDate": {$lte: new Date(), $gte: new Date(new Date().setDate(new Date().getDate()-20))}}} 
]) 

, но этот вопрос также учитывает время. Я хочу сравнивать только по отношению к дате.

ответ

2

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

Если у вас есть такая дата в дб, попробуйте ниже запрос

db.collection.aggregate([ 
    {$match: {"data.createdDate": {$lte: new Date().setHours(0,0,0,0), $gte: new Date(new Date().setDate(new Date().getDate()-20)).setHours(0,0,0,0)}}} 
])