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