2013-09-07 4 views
0

Я принял spring-data-mongo какое-то время, но я ударил блокиратора, когда мне нужно до fetch данных регулярно, скажем каждые 20 seconds. Я использую объект ISODate, поэтому он имеет форму ISODate("2013-08-09T05:51:16.140Z").Не удалось запросить mongodb по дате

Ниже приведен пример документ

{ 
"_id": "fffd8e68-e81a-4835-ac5c-ef532291584b", 
"_class": "net.publichealth.edowmis.datalayer.models.Post", 
"userID": "09258b84-6d09-4977-a0f1-4e59b963221f", 
"dateCreated": ISODate("2013-08-09T06:29:07.413Z"), 
"lastModified": ISODate("2013-08-09T06:29:07.413Z"), 

} 

Я хотел бы запросить базу данных, чтобы найти выборку всех записей в то время: 2013-08-09 06:29:07, но не из запросов ниже работал. Я пробовал эти запросы в mongo shell (Ubuntu терминал) и rockmongo и intellij mongo плагин

// rock mongo on post collection 
    { 
    "dateCreated" : new ISODate("2013-08-09T06:29:07") 
    } 

    { 
    "dateCreated" : new ISODate("2013-08-09 06:29:07") 
    } 

    { 
    "dateCreated" : new ISODate("2013-08-09") 
    } 

    // terminal and intelliJ 
    db.post.find({"dateCreated":new ISODate("2013-08-09T06:29:07")}) // did all the combination above. 

Нет Результат :(

Я не могу найти улов. Пожалуйста, посмотрите на это для меня

Спасибо

ответ

2

Во-первых, не забудьте указать Z. Это индикатор ISO8601 для «zulu time», что является еще одним способом сказать «UTC» или «GMT». Без этого вы просто представляете «неопределенное» время, или, другими словами, положение календаря, которое не является отдельным моментом времени, потому что вы не указали, как оно относится к UTC. (Я не уверен, разрешит ли Монго это или нет.)

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

Возможно, вы захотите выполнить запрос диапазона. Например, вы могли бы сделать это:

db.post.find({"dateCreated": {"$gte": new ISODate("2013-08-09T06:29:07Z"), 
           "$lt": new ISODate("2013-08-09T06:29:08Z")}}) 

Смотрите также this documentation.

+0

Отлично, вы мужчина! еще раз спасибо. Если вы знакомы с весенними данными, можете ли вы добавить к своему ответу лучший способ сформировать объект даты java, чтобы получить результат по диапазону, как вы это делали? Следует ли рассматривать JodaTime? –

+0

IMHO - Joda Time должен * всегда * считаться, но это не значит, что он * требуется *. Не уверен, что я следую остальным вашим комментариям, но похоже, что это должен быть новый вопрос с поддержкой деталей. –

+0

ОК спасибо, я буду готовить что-то самостоятельно, если он все еще не работает, тогда я создам пост. –

Смежные вопросы