Я использую Spring Boot с MongoDB. В этом проекте у меня есть класс домена ControlVariable, который имеет атрибут массива с именем ControlVarEntries. Я пытался использовать оператор $ slice, чтобы получить только последние пять controlVarEntries всех controlVars при их извлечении в моем собственном методе findAll. Этот запрос работает при попытке моего клиента Mongo:
db.getCollection('controlVariable').find( {}, { controlVarEntries: { $slice: -5 } } )
Однако я пробовал аналогичный подход в моем проекте Spring Boot с аннотацией @Query, и мне не удалось получить те же результаты. Это, например, возвращает все записи:
@Repository
public interface ControlVariableRepository extends MongoRepository<ControlVariable, String> {
@Query("{ controlVarEntries: { $slice: ?0 } }")
Page<ControlVariable> findAllLimitedNumberOfEntriesQuery(Pageable pageable, Integer numberOfEntries);
}
Я хотел бы знать, ошибочен ли мой запрос или я использую неправильный синтаксис.
Спасибо!
К сожалению, он тоже не работает. Я должен также сказать, что я пробовал без использования каких-либо параметров: @Query ("{}, {controlVarEntries: {$ slice: 5}}") Но это тоже было неправильно.
Вы должны указать проектный документ в аннотации @Query.
Пытаться
@Query(value = "{}", fields = "{'controlVarEntries': { '$slice': ?0 } }")
Page<ControlVariable> findAllLimitedNumberOfEntriesQuery(Pageable pageable, Integer numberOfEntries);
Вы должны использовать
$slice: ?1, я считаю