Spring Data MongoDB - пользовательский запрос

Я хочу хранить информацию о трассировке, как показано ниже:

{
    "timestamp": 1394343677415,
    "info": {
        "method": "GET",
        "path": "/trace",
        "headers": {
            "request": {
                "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
                "Connection": "keep-alive",
                "Accept-Encoding": "gzip, deflate",
                "User-Agent": "Mozilla/5.0 Gecko/Firefox",
                "Accept-Language": "en-US,en;q=0.5",
                "Cookie": "_ga=GA1.1.827067509.1390890128; ..."
                "Authorization": "Basic ...",
                "Host": "localhost:8080"
            },
            "response": {
                "Strict-Transport-Security": "max-age=31536000 ; includeSubDomains",
                "X-Application-Context": "application:8080",
                "Content-Type": "application/json;charset=UTF-8",
                "status": "200"
            }
        }
    }

Моя сущность @Document расширяет HashMap.

Теперь мне нужно написать собственный запрос для разбиения на страницы.

В клиентской оболочке Mongo я бы написал это:

db.traceInfo.find({"headers.response.status": "404"}).limit(n);

и это работает, но я не знаю, как написать этот запрос как @Query в Spring MongoRepository? Как я могу это сделать?


person user    schedule 25.10.2017    source источник


Ответы (1)


Это очень просто, но ключевое слово limit не поддерживается spring-data-mongodb, посмотрите ссылку здесь: https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#repository-query-keywords

Возможное решение:

@Query({"headers.response.status": "?1"})
List<T> findByGivenStatus(int status);
person Jaiwo99    schedule 25.10.2017
comment
Спасибо, а как я могу получить Page‹T›, где headers.response.status: 500? Будет ли это работать: @Query({headers.response.status: ?2}) Page‹T› findByGivenStatus(Pageable pageable, int status); - person user; 26.10.2017
comment
@user, просто проверь, все будет работать - person Jaiwo99; 27.10.2017