2015-04-03 6 views
0

Я пытаюсь получить счет на размещенном элементе от meteor-mongo соответствующих периодов даты.Получить данные MongoDB, соответствующие дате

Я установил даты моих сообщений как таковые.

posts 
    submitted: new Date() 

Даты в базе данных имеют следующий формат.

yyyy-mm-dd 16:16:34.317Z // I do not understand the last part (what format it is) 

Я попытался это, чтобы получить соответствует date of today от submitted полей

var currentDate = new Date(); 
var dd = currentDate.getDate(); 
var mm = currentDate.getMonth()+1; 
var yyyy = currentDate.getFullYear(); 
var today = yyyy+'-'+mm+'-'+dd; 

Posts.find({submitted: today}).count() 

Однако последняя часть возвращается 0.

Это потому, что отсутствует последняя hh, mm, ss часть сегодняшнего дня? Если да, то как я могу сообщить meteor-mongo, чтобы игнорировать временную часть даты, чтобы я мог вернуть этот счет?

ответ

0

Я не люблю иметь дело с датой JS объектов форматов, и я предполагаю, что вы либо (я не понимаю последнюю часть (какой формат он))

Дайте попробовать в momentjs package, в documentation его довольно ясно.

Так что на вставке вы можете что-то типа.

var today = moment().format(''MMMM Do YYYY, h:mm:ss a'); // April 3rd 2015, 12:17:06 pm 
Posts.insert({subbmited:today}) 

и выполните простую находку.

var endQuery = today..add('days', 3).calendar(); // just an example. 
Posts.find({submitted: {$gt: today,$lt:endQuery}}) 

Здесь благодаря точке @Larry Maccherone мы используем $gte (терку чем) и $lt (меньше), так что это работает, как найти меня опубликовать между постом представил день и пост представил DAT + 3 дня (например, вы задаете диапазоны управления)

+0

А я использовал momentJS для других вещей, но я не использовал его для этого. Даже не думал об этом! Спасибо Ethaan –

+1

Я вижу, что этот ответ принят, но я волнуюсь. Кажется, вы рекомендуете, чтобы он сохранял свой ответ только в дневной гранулярности в виде строки. Это может очень хорошо работать, но я обычно рекомендую хранить все события в миллисекундовой детализации, но когда вы хотите выделить определенный день, вы предоставляете запрос диапазона, определяющий дату и время начала и окончания дня. В MongoDB вы должны использовать $ gte и $ lt. –

+0

@ LarryMaccherone, который был быстрым примером, примером которого является его просто демонстрация, реальная точка этого ответа указывала ему на мгновенный пакет и показывала, что он может сделать. – Ethaan

0

Try что-то вроде этого

posts.find({"submitted": /.*today*/}) 
+0

Что делает /.*today*/? –

1

Вы храните представленный дату в MongoDB как с информацией о времени и часового пояса. Выполнение прямого сравнения ваших currentDate с датой submitted в Mongo никогда не будет правдой, так как ваш currentDate не содержит информации о времени.

Также вы используете тип данных String для запроса даты, которая также не будет работать, поскольку вам необходимо использовать тип данных Date. Что-то, как это будет работать для вас:

var today = new Date(); 
today.setHours(0, 0, 0, 0); 
Posts.find({submitted: {$gt: today}}) 

который вернет все сообщения с датой более чем полуночи сегодняшнего дня.

+0

Спасибо за ваш ответ Кертис. Но я планирую иметь дело с большим количеством форматов, и ниже ответ дал мне более гибкое решение! –

+0

@Curtis, я думаю, что вы на правильном пути, но вы, вероятно, захотите указать $ gte и $ lt, чтобы отбросить определенный день. Если бы все, что он когда-либо захотел, сегодня, и в базе данных нет будущих дат, ваш ответ даст желаемые результаты.Использование $ gte и $ lt обеспечивает более общий ответ для всех событий в любой день. Вы даже можете указать часовой пояс для своего «дня», как я предлагаю. –