Spring Data mongodb view - PullRequest
       15

Spring Data mongodb view

0 голосов
/ 17 января 2020

Мы используем Spring Data mongodb версии 2.1.3.

У нас есть две коллекции cities и countries.

@Document
public class City {
    private String name;
    private ObjectId id;
    private ObjectId countryId;
}
@Document
public class Country {
    private String name;
    private ObjectId id;
}

У нас есть хранилища базы данных, расширяющие org.springframework.data.mongodb.repository.MongoRepository.

Теперь мы хотим создать конечные точки API REST, которые бы возвращали агрегированные данные CityCountryDto. По этой причине мы хотим сделать доступным только для чтения представление cityCountry https://docs.mongodb.com/manual/reference/method/db.createView/

db.createView (
   "cityCountry",
   "city",
   [
     { $lookup: { from: "country", localField: "countryId", foreignField: "id", as: "country_docs" } },
     { $project: { "country_docs._id": 0} }
   ]
)

Мы попробовали

@Document
CityCountry extends City {

    private Country country;
}

Примечание, чтобы оно работало Нам нужно было либо создать представление, прежде чем мы запустим приложение в базе данных, либо нам пришлось использовать инструмент регистрации изменений данных (например, Flyway, liquibase или mongobee). Чтобы упростить задачу, учтите, что представление существовало в базе данных до того, как мы запустили приложение.

Мой вопрос, есть ли представление поддержки данных Spring из коробки? Есть ли лучший способ добиться этого?

1 Ответ

0 голосов
/ 17 января 2020

Да, есть несколько репозиториев, таких как JpaRepository для MongoDB. Сначала вам нужно получить драйвер mon go и установить некоторые свойства для вашего соединения в application.properties из вашего приложения для весенней загрузки:

1. spring.data.mongodb.username= [your username] 2. spring.data.mongodb.password= [your password] 3. spring.data.mongodb.database= [your database] 4. spring.data.mongodb.port=27017 5. spring.data.mongodb.host=localhost

I намеренно оставили порт и хост, потому что по умолчанию сервер MongoDB открывается на порту 27017 и хосте localhost.

После этого вы можете создать несколько репозиториев, расширив MongoRepository<MODEL,ID> как здесь

...