Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在MongoDB中将日期作为字符串进行比较_Java_Mongodb - Fatal编程技术网

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

Java 在MongoDB中将日期作为字符串进行比较,java,mongodb,Java,Mongodb,我正在尝试比较以下系列中的日期 $db.notifications.find(){“\u id”: ObjectId(“51a4467be4b0142fc8b80eda”),“时间”:“5月28日星期二11:24:03” IST 2013,“键”:“VALUE1”}{“\u id”: ObjectId(“51a4467be4b0142fc8b80edb”),“时间”:“5月28日星期二11:24:03” IST 2013,“关键”:“价值2”} 使用 $db.notifications.find

我正在尝试比较以下系列中的日期

$db.notifications.find(){“\u id”: ObjectId(“51a4467be4b0142fc8b80eda”),“时间”:“5月28日星期二11:24:03” IST 2013,“键”:“VALUE1”}{“\u id”: ObjectId(“51a4467be4b0142fc8b80edb”),“时间”:“5月28日星期二11:24:03” IST 2013,“关键”:“价值2”}

使用

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

但我观察到的是,它将“时间”视为 字符串not as Date,因此第二个命令将两者都返回给我 条目

$db.notifications.find({“time”:{“$gt”:“Fri May 31 00:00:00 IST 2013年{u id:ObjectId(“51a4467be4b0142fc8b80eda”),“时间”:“星期二” 2013年5月28日11:24:03,“密钥”:“VALUE1”}{u id”: ObjectId(“51a4467be4b0142fc8b80edb”),“时间”:“5月28日星期二11:24:03” IST 2013,“关键”:“价值2”}

你能帮我回答正确的问题并告诉我怎么做吗 正确的版本可以用JAVA编写

多谢

编辑1:


我正在使用下面的代码保存日期

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

我看到我只把“时间”保存为日期。为什么仍然存在问题?

我认为您的日期应该是ISODate对象。当前它是查询中的一个字符串。试试下面的方法

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

另外,

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

> db.MyCollection.find()
{ "_id" : ObjectId("51a4e4aa3004bc68e4f499e5"), "date" : ISODate("2000-09-29T23:00:00Z") }
确保在保存“时间”字段时将其作为日期插入。如果使用Java驱动程序插入值,则在将时间字段添加到DBObject时,需要确保它是Java.util.Date(假设您直接使用Java驱动程序,而不是某个第三方库)


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

这样做是因为您将其存储为字符串!我正在使用以下代码SimpleDateFormat dateFormat=新SimpleDateFormat(“yyyy-MM-dd'T'HH:MM:ss.SSS”)保存日期。;dateFormat.setLenient(false);dateFormat.setTimeZone(TimeZone.getTimeZone(“UTC”));String nowString=dateFormat.format(newdate());Date nowDate=dateFormat.parse(nowString);输入。输入(“时间”,nowDate);DBCollection=db.getCollection();DBObject DBObject=(DBObject)JSON.parse(input.toString());collection.insert(dbObject);你能帮我理解我这里的错误吗?你评论中的代码是创建一个新的日期对象(new Date()),使用SimpleDataFormatter将其转换成字符串(dateFormat.format(new Date()),将其转换回日期对象(dateFormat.parse(nowString))。通过输入,你可以在更少的代码行中得到相同的结果。put(“time”,new Date()),但这仍然是错误的。输入的是什么类型,其中还有什么?这是正在执行的查询。>>>db.notifications.find({“时间”:{“$gt”:{“$Date”:“2013-05-24T18:30:00.000Z”}})
> db.MyCollection.find()
{ "_id" : ObjectId("51a4e4aa3004bc68e4f499e5"), "date" : ISODate("2000-09-29T23:00:00Z") }