mongo 內嵌文檔查詢並過濾 java實現

話不多說,直接上代碼。  這是我mongo內的存儲結構如下,我現在需要查找的是

tagName =TT01,targetId=13  並且 timeValueList 這個數組中的 time在我查找的範圍內的數據。

{ 
    "_id" : ObjectId("5e95851ed78d591eec820e2b"), 
    "serial" : "zth_test", 
    "label" : "wendu", 
    "tagName" : "TT01", 
    "time" : NumberLong(1580879744), 
    "value" : "1485", 
    "targetId" : NumberInt(13), 
    "timeValueList" : [
        {
            "time" : NumberLong(1580879744), 
            "value" : "1485"
        }, 
        {
            "time" : NumberLong(1580879745), 
            "value" : "1485", 
            "_class" : "io.renren.common.model.TimeValue"
        }, 
        {
            "time" : NumberLong(1580879746), 
            "value" : "1485", 
            "_class" : "io.renren.common.model.TimeValue"
        }
}

我百度了別人的博客看過官網後,java實現。

 Query query = new Query();
        query.addCriteria(Criteria.where("targetId").is(targetId).andOperator(Criteria.where("tagName").in(tagName)));
        query.addCriteria(Criteria.where("timeValueList").elemMatch(Criteria.where("time").gte(startTime).andOperator(Criteria.where("time").lte(endTime))));
        /**
         * 組裝成的sql語句
         * db.getCollection("history").find({"tagName":"TT01","targetId":13},                                    {"timeValueList":{$elemMatch:{"time":{$gte:1580879744,$lte:1580879746}}}})
         */
        List<HistoryData> historyData = mongoTemplate.find(query, HistoryData.class, MongoCollection.HISTORY);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章