鍍金池/ 問答/Java  數(shù)據(jù)庫(kù)  Office/ mongodb內(nèi)嵌數(shù)組查詢 java代碼實(shí)現(xiàn)

mongodb內(nèi)嵌數(shù)組查詢 java代碼實(shí)現(xiàn)

我在Robo 3T(一款mongodbGUI軟件)使用以下代碼

db.getCollection('json').find({"time":{$gte:1528771648859,$lte:1528771698869}},{"data":{$elemMatch :{"deviceid":456789123}}})

能夠獲取我想要的結(jié)果,但是我用利用一下代碼卻不可以

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

想請(qǐng)問各位大佬,我如何把上面的sql語(yǔ)句利用java實(shí)現(xiàn)并返回正確結(jié)果?

回答
編輯回答
蝶戀花

首先Robot 3T里面寫得就不對(duì)。find方法的簽名是:

db.<集合>.find(<查詢>, <投影>, <選項(xiàng)>);

{"data":{$elemMatch :{"deviceid":456789123}}}已經(jīng)屬于投影的參數(shù)了,雖然不會(huì)報(bào)錯(cuò),但肯定不是你想要的結(jié)果。相當(dāng)于你的條件只是{"time":{$gte:1528771648859,$lte:1528771698869}},所以查到了結(jié)果。
Java的代碼反而是正確的。但因?yàn)槎嗔艘粋€(gè)條件,所以查不出結(jié)果來。

2018年7月20日 03:28