在MongoDB中将日期作为字符串进行比较

时间:2013-05-28 15:45:14

标签: java mongodb

我正在尝试比较以下集合中的日期

  

$ db.notifications.find(){“_ id”:   ObjectId(“51a4467be4b0142fc8b80eda”),“time”:“Tue May 28 11:24:03   IST 2013“,”KEY“:”VALUE1“} {”_ id“:   ObjectId(“51a4467be4b0142fc8b80edb”),“time”:“Tue May 28 11:24:03   IST 2013“,”KEY“:”VALUE2“}

使用

  

$ db.notifications.find({“time”:{“$ gt”:“Fri May 31 00:00:00 IST   2013" }})

但我观察到的是它将“时间”视为比较 字符串不是日期,因此第二个命令返回我 条目。

  

$ db.notifications.find({“time”:{“$ gt”:“Fri May 31 00:00:00 IST   2013“}}){”_ id“:ObjectId(”51a4467be4b0142fc8b80eda“),”time“:”Tue“   5月28日11:24:03 IST 2013“,”KEY“:”VALUE1“} {”_ id“:   ObjectId(“51a4467be4b0142fc8b80edb”),“time”:“Tue May 28 11:24:03   IST 2013“,”KEY“:”VALUE2“}

您能否帮我解决正确的问题,并让我知道如何 正确的版本可以用JAVA编写。

非常感谢!!

EDIT1:

我使用以下代码保存日期

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
dateFormat.setLenient(false);
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); 
String nowString = dateFormat.format(new Date()); 
Date nowDate = dateFormat.parse(nowString); 
input.put("formattedDate", nowDate);
DBCollection collection = db.getCollection(<collection name>);
DBObject dbObject = (DBObject) JSON.parse(input.toString());
collection.insert(dbObject);"

并使用

查询
DBObject query = QueryBuilder.start().put("formattedDate")
                                     .greaterThan(prevDate).get();
DBCursor cursorDocJSON = collection.find(query);

我看到我将“时间”保存为仅日期。为什么还有问题?

2 个答案:

答案 0 :(得分:1)

看起来您的日期存储为字符串而不是ISODate。如果它存储为真实日期而不是字符串,您会看到类似的内容:

> db.MyCollection.find()
{ "_id" : ObjectId("51a4e4aa3004bc68e4f499e5"), "date" : ISODate("2000-09-29T23:00:00Z") }

确保在保存“时间”字段时将其作为日期插入。如果您使用Java驱动程序插入值,则需要确保将时间字段添加到DBObject时是一个java.util.Date(假设您直接使用Java驱动程序而不是某些第三方库) )。

当您将其作为日期插入时,您应该能够使用shell中的ISODate值或通过Java驱动程序使用日期来执行所需的查询类型。

答案 1 :(得分:0)

我认为你的日期应该是一个ISODate对象。目前它是您查询中的一个字符串。尝试类似下面的内容。

db.coll.find({"time" : { $gte : new ISODate("2013-05-28T20:18:00Z") }});

此外,related link