如何在org.springframework.data.mongodb.repository.Query()

时间:2016-10-18 12:38:03

标签: spring spring-data spring-data-jpa spring-mongo spring-mongodb

我需要从具有一组文档的MongoDB中获取记录。我正在使用Spring Boot和MongoRepository来执行CRUD操作。我正在使用Query注释来传递我的Mongo查询。但Spring无法解析我编写的查询。我是MongoDB的新手,所以如果这是一个愚蠢的问题,请原谅。感谢任何帮助,谢谢。

这是我正在使用的查询:

@Query("{ '_id.AID' : ?0, '_id.STS' : {'$gte': NumberLong(1475778600)}, '_id.ETS':{'$lte': NumberLong(1475781659)}}")
List<AggregatedData> findByAidAndStartTimeAndEndTime(String aid);

我得到的例外:

Caused by: com.mongodb.util.JSONParseException: 
{ '_id.AID' : "_param_0", '_id.STS' : {'$gte': NumberLong(1475778600)}, '_id.ETS':{'$lte': NumberLong(1475781659)}}
                                                ^
    at com.mongodb.util.JSONParser.read(JSON.java:301) ~[mongodb-driver-3.2.2.jar:na]
    at com.mongodb.util.JSONParser.parse(JSON.java:180) ~[mongodb-driver-3.2.2.jar:na]

Mongo记录结构:

{
    "_id" : {
        "SiteId" : "JATH",
        "AID" : "JA04",
        "STS" : NumberLong(1475778600),
        "ETS" : NumberLong(1475781659)
    },
    "TS" : [ 
        1475820600, 
        1475779200, 
        1475779800, 
        1475780400, 
        1475781000, 
        1475781600
    ],
    "Tags" : {
        "ActivePower" : {
            "Max" : [ 
                1181.5, 
                1181.5, 
                1181.5, 
                1181.5, 
                1181.5, 
                1181.5
            ],
            "Min" : [ 
                73.5, 
                73.5, 
                73.5, 
                73.5, 
                73.5, 
                73.5
            ],
            "Sum" : [ 
                224430, 
                224430, 
                224430, 
                224430, 
                224430, 
                224430
            ],
            "Avg" : [ 
                374.05, 
                374.05, 
                374.05, 
                374.05, 
                374.05, 
                374.05
            ],
            "Count" : [ 
                600, 
                600, 
                600, 
                600, 
                600, 
                600
            ],
            "Std" : [ 
                175.242871942532, 
                175.242871942532, 
                175.242871942532, 
                175.242871942532, 
                175.242871942532, 
                175.242871942532
            ]
        }        
    }
}

2 个答案:

答案 0 :(得分:1)

试试这个:

@Query(value = "{ '_id.AID' : ?0 }", fields = {"_id.STS' : {'$gte': NumberLong(1475778600)}, '_id.ETS':{'$lte': NumberLong(1475781659)}}")

答案 1 :(得分:1)

<强>答案!!:

嗨,我解决了...... 这是查询的外观:

@Query("{ '_id.AID' : ?0, $and:[{'_id.STS' : {'$gte': ?1}}, {'_id.ETS':{'$lte': ?2}}]}")    
List<AggregatedData> findByAidAndStartTimeAndEndTime(String aid, Long startTimeRange, Long endTimeRange);