2015-06-11 3 views
4

Я хочу получить документы текущего дня из коллекции MongoDB. Мои документы выглядят так:MongoDB найти сравнение с CurrentDate

{ 
    "_id" : ObjectId("55743941789a9abe7f4af3fd"), 
    "msisdn" : "9xxxxxxxxxx", 
    "act_date" : ISODate("2014-11-24T00:00:00Z"), 
    "date" : ISODate("2015-06-07T00:00:00Z"), 
    "recharge" : { "recharge_amt" : 0, "rechargetype" : "WEB" }, 
    "voice" : { "local_og_mou" : 20, "local_other_mobile_og_mou" : 0, "nld_og_mou" : 0, "nld_other_mobile_og_mou" : 10 }, 
    "gprs" : { "total_access_count" : 1, "total_datavolume_mb" : 42 }, 
    "sms" : { "freesms" : 3, "local_sms_count" : 0, "nat_sms_count" : 0, "inter_sms_count" : 0 } 
} 
+0

понятнее с редактированием .... –

+0

http://docs.mongodb.org/manual/reference/operator/update/currentDate/ –

+0

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

ответ

5

По вашему вопросу вы хотите получать текущий день документы из коллекции MongoDB. В MongoDB оболочки при вводе new Date() это дает вам текущую дату со временем, и это значение всегда изменяется при запуске же new Date() так, вероятно, ваш запрос, как это:

db.collectionName.find({"start_date":new Date()}).pretty() 

Но, я думаю, этот запрос возвращает те документы, которые будут представляет в своей коллекции, но тот же ток Date значение может быть не представляет в документах SO этом случае вы должны использовать следующие

db.collectionName.find({"start_date":{"$lte":new Date()}}).pretty() 

Или

db.collectionName.find({"start_date":{"$gte":new Date()}}).pretty() 

В некоторых случаях Если вы хотите, чтобы найти точное совпадение с year,month,day, то вы должны использовать aggregation с $year,$month,$dayOfMonth in $project, как это:

db.collectionName.aggregate({ 
    "$project": { 
    "year": { 
     "$year": "$date" 
    }, 
    "month": { 
     "$month": "$date" 
    }, 
    "day": { 
     "$dayOfMonth": "$date" 
    } 
    } 
}, { 
    "$match": { 
    "year": new Date().getFullYear(), 
    "month": new Date().getMonth() + 1, //because January starts with 0 
    "day": new Date().getDate() 
    } 
}) 

В приведенном выше запросе агрегации будет возвращать те документы, которые соответствуют текущей дате, как year,month,day текущей даты. Также вы замените $match в

var currentDate = new Date() 

{ 
    "$match": { 
    "year": currentDate.getFullYear(), 
    "month": currentDate.getMonth() + 1, //because January starts with 0 
    "day": currentDate.getDate() 
    } 
} 
+0

Спасибо Yogesh и Dipesh.Заполните требуемый результат. –

0

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

db.collection.find({"start_date" : { $gte : new ISODate("2015-05-27T00:00:00Z") }}); 

Примечание: выше запроса будут возвращены документы, размер которых превышает установленную дату.

Чтобы найти дату, которая приравнивает другую дату

db.collection.find({"start_date" : new ISODate("2015-05-27T00:00:00Z") }); 
Смежные вопросы