Поиск даты MongoDB в Java возвращает нулевые результаты

У меня есть список файлов в GridFS, которые я пытаюсь запросить по дате. Образец документа выглядит следующим образом:

{
    "_id" : ObjectId("52e431d3e84f6fa18c53c808"),
    "chunkSize" : NumberLong(262144),
    "length" : NumberLong(13021),
    "md5" : "0eb01f0d266f4bf4764d4ffc7e70a7ed",
    "filename" : "120_1390686674383",
    "contentType" : null,
    "uploadDate" : ISODate("2014-01-25T21:51:15.049Z"),
    "aliases" : null
}

Я пытаюсь получить «самый последний» в соответствии с меткой времени, выполнив следующие действия:

DateTime dt = new DateTime(queryObj.getTime()); //org.joda.DateTime
BasicDBObject sort = new BasicDBObject();
sort.put("uploadDate", -1);

BasicDBObject query = new BasicDBObject();
query.put("uploadDate", new BasicDBObject("$gte", dt));

DBCursor cursor = fileStore.getFileList(query, sort);

Если я просто отсортирую хранилище файлов, я получу множество записей и смогу перечислить их с помощью курсора. Однако всякий раз, когда я пытаюсь использовать $gte или $lte, я получаю нулевой результат.

Есть пропущенный шаг?


person ist_lion    schedule 25.04.2014    source источник


Ответы (1)


Вы передаете ссылку joda DateTime, которую драйвер не знает, как это сделать. Если вы проверите журналы, вы, вероятно, обнаружите, что он по существу вызывает toString() для этого и передает это. Поскольку строка не является датой, сравнение не выполняется. Попробуйте передать только java.util.Date (вы можете получить его из DateTime, iirc).

person evanchooly    schedule 25.04.2014
comment
Вы были правы, у объекта dt была функция DateTime, которая работала правильно. - person ist_lion; 28.04.2014