我在Robo 3T(一款mongodbGUI软件)使用以下代码
db.getCollection('json').find({"time":{$gte:1528771648859,$lte:1528771698869}},{"data":{$elemMatch :{"deviceid":456789123}}})
能够获取我想要的结果,但是我用利用一下代码却不可以
BasicDBObject query = new BasicDBObject();
query.put("time",(new BasicDBObject("$gte",1528771648859L)).append("$lte",1528771698869L));
query.put("data",new BasicDBObject("$elemMatch",new BasicDBObject("deviceid",456789123)));
DBCursor dbCursor = mongoTemplate.getCollection("json").find(query);
想请问各位大佬,我如何把上面的sql语句利用java实现并返回正确结果?
首先Robot 3T里面写得就不对。find方法的签名是:
{"data":{$elemMatch :{"deviceid":456789123}}}
已经属于投影的参数了,虽然不会报错,但肯定不是你想要的结果。相当于你的条件只是{"time":{$gte:1528771648859,$lte:1528771698869}}
,所以查到了结果。Java的代码反而是正确的。但因为多了一个条件,所以查不出结果来。