1
juicy 2013-08-29 13:15:06 +08:00
按照JavaScript这语言来分析,第一种是String类型,跟Date类型比较可能无法得到期望的结果吧。如果一定要用String类型,可能存的时候就存String类型就可以了吧。不过这样的明显没有用Date类型好啊~
|
2
lyris OP @juicy 有道理,谢谢。
现在我如果吧 {"manufacture_details.release_date": {"$gte": new ISODate("2012-05-17 08:14:15.656")}} 这个直接给Java 代码的话,JSON都pass不过, 发愁 如: queryStr = "{\"manufacture_details.release_date\": {\"$gte\": new ISODate(\"2012-05-17 08:14:15.656\")}}"; DBObject queryObject = (DBObject) JSON.parse(queryStr); cursor = collection.find(queryObject); 直接抛异常: Exception in thread "main" com.mongodb.util.JSONParseException: {"manufacture_details.release_date": {"$gte": new ISODate("2012-05-17 08:14:15.656")}} |
3
lyris OP 看来java如果要直接兼容mongo shell 里面的手写查询,只能来个正则把形如new ISODate("2012-05-17 08:14:15.656") 这种直接翻译成 { "$date" : "2012-05-17T08:14:15.656Z"} 得了,日期类型真是麻烦。
|
4
juicy 2013-08-29 13:46:44 +08:00
@lyris 不是很懂Java,不过刚看了http://docs.mongodb.org/ecosystem/drivers/java-types/这页,这里面不是有Date类型么
|
5
lyris OP 嗯,谢谢!
JavaScript(MongoDB Shel)里面用 new ISODate() 来将字符串转化为Date类型, 对应Java 里面用 new BasicDBObject("ts", date); 这样就恍然大悟了。 原来还以为BasicDBObject 生成的toString()可以直接给MongoDb 的JavaScript Shell拿来用呢,发现还不是,至少JSON规范里面就不能处理 new ISODate 这种内建函数。 Java里面代码很累赘,不过用Java还是喜欢它的速度和编译检查。 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); try { Date date = sdf.parse("2012-05-17T08:14:15.656Z"); BasicDBObject time = new BasicDBObject("ts", date); //实际上这里面"ts" 可以为任意键值 System.out.println(time.toString()); } catch (ParseException e) { e.printStackTrace(); } |