Spring data предлагает различные репозитории для CRUD, подкачки и сортировки для mongodb. Когда нам нужен документ из mongodb с использованием различных атрибутов, мы склонны писать метод findBy
или метод с явным запросом, аннотированным @Query
. Но если мой документ имеет много свойств, и мне нужны различные средства для извлечения документа, предлагает ли Spring «метод репозитория», который принимает карту атрибутов и значений? Написание различных findBy
может быть громоздким. Использование QueryDSL кажется быть вариантом, но требует генерации кода и изменений build.gradle. Я могу использовать QueryDSL, если решение на основе карты недоступно.
Например:
class FooDocument {
String id ;//mongodb ObjectId
String name
String version
boolean deleteIndicator
... any more attributes
}
Нужен метод в репозитории, например
List<FooDocument> findByMap ( Map attrValMap );
Вызовите метод (groovy)
repository.findByMap ( [ "name" : "fooname", "version" : "1.0" ] )
repository.findByMap ( [ "name" : "fooname"] )
repository.findByMap ( [ "version" : "1.0", "deleteIndicator" : false] )
Я готов написать этот метод, используя комбинацию Criteria/Query
или выборку на основе BasicDBObject
с использованием интерфейса MongoOperations, если данные Spring не предлагают это из коробки.