Pergunta

I have a list of files in a GridFS that I am attempting to query by date. The sample document looks like the following:

{
    "_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
}

I am attempting to get the "most recent" according to timestamp by doing the following:

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);

If I simply sort the fileStore I get numerous records back and I can enumerate via the cursor. However, whenever I try to use $gte or $lte I get zero results.

Is there a missing step?

Foi útil?

Solução

You're passing in a joda DateTime reference which the driver doesn't know how to do. If you check the logs, you'll probably find that it essentially calls a toString() on that and passes that in. Since a string is not a Date, the comparison fails. Try passing in just a java.util.Date (you can get one from the DateTime, iirc).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top