2012-06-14 3 views
5

Я пытаюсь запросить mongodb для документов, где «дата» - две даты. Образец данных:MongoDB Query by Date в Java

{ 
     "_id" : ObjectId("4fad0af6709fbc1d481c3e05"), 
     "ID" : NumberLong("200930746205085696"), 
     "text" : "Forgot my charger...:(", 
     "date" : ISODate("2012-06-14T10:49:57Z"), 
     "sentiment" : "NEG" 
} 

Мой Java-код:

DBCursor cursor = null; 
DB db = connect(); 

    Date startDate = new Date(System.currentTimeMillis() - (long)(numOfTimePeriods+1)*time); 
    Date endDate = new Date(System.currentTimeMillis() - (long)numOfTimePeriods*time); 
    DBObject query = new BasicDBObject(); 
    query.put("date", new BasicDBObject("$gt", startDate).append("$lte", endDate)); 

    cursor = db.getCollection("status").find(query); 

но объект курсора не имеет никаких результатов.

объект запроса выглядит следующим образом:

{ "date" : { "$gt" : { "$date" : "2012-05-15T00:16:15.184Z"} , "$lte" : { "$date" : "2012-06-14T10:16:15.184Z"}}} 

Я подозреваю, что проблема является дата представления в БД. Любые предложения по этому поводу?

+1

Это должно было сработать. Можете ли вы дважды проверить данные? – Thilo

+0

Да, вы правы, это работает! Проблема была в данных, я запросил период, поскольку нет документов для извлечения. Дурак я! Спасибо за помощь! – andjelko

+0

Просто взгляните на http://stackoverflow.com/questions/6840540/java-mongodb-query-by-date Это уже решено там. – josete

ответ

-1

Вы не должны использовать and operator в своем запросе?

db.foo.find({ $and: [ { date: { $gt: startDate } }, {date : { $lt: endDate} } ] }) 
+0

Нет, я думаю, что запрос был в порядке. Я тоже очень похож, и он работает. – Thilo

+0

$ и является ли implcit на свойство, если вы добавляете значения? – jocelyn

+0

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%3C%2C%3C%3D%2C%3E%2C%3E%3D "Вы также можете объединить эти операторы для определения диапазонов" Не уверен, что это работает в общем случае (с другими операторами). Если у вас есть время, можете ли вы попытаться объединить $ gt с $ nin или что-то еще? – Thilo

1

Это представление $ date - это просто представление toString в Java-драйвере Date. Он использует строгое представление JSON/BSON, а не расширенное BSON 10gen, где значения могут быть объектами, представленными так же, как и в оболочке. Вы не должны пытаться запрашивать в оболочке с использованием вывода toString, как это, потому что это не будет работать во многих случаях.