Как найти существующие списки коллекций в Spring Boot mongorepository?

Во-первых, ниже приведен класс документа mongodb,

@Getter
@Setter
@Document(collection="Posts") // The name of collection is "Posts"
public class Post {

    @Id
    private String _id;

    @Indexed(unique = true)
    private Long id;

    @Field
    private String title;

    @Field
    private String body;

    @Field
    private Date createdDate;

    @DBRef 
    private User user;

    @DBRef 
    private Collection<Tag> tags;
}

И я сделал простой интерфейс mongorepository

public interface PostMongoRepository extends MongoRepository<Post, Long> {
}

Но у меня проблемы с загрузкой исходных данных json в mongodb на уровне обслуживания,

try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "EUC-KR"))) {
            String line;
            StringBuffer strBuffer = new StringBuffer();
            while ((line = br.readLine()) != null) {
                strBuffer.append(line+ "\n");
            }

            ObjectMapper objectMapper = new ObjectMapper();
       objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
            TypeReference<List<Post>> typeReference = new TypeReference<List<Post>>(){};
            Collection<Post> posts = objectMapper.readValue(strBuffer.toString(), typeReference);

            // I am stuck on this line
            if(postMongoRepository.FIND_THE_COLLECTION_TITLE) {  

              for(Post post : posts) {
                postMongoRepository.save(post);
              }
            }
        } catch (IOException ex) {
            System.out.println(ex.getMessage());
        }

Я пытаюсь подтвердить, создается ли коллекция «Сообщения» или нет. Но я понятия не имею, как найти существующие коллекции через интерфейс mongorepository. Я пытаюсь использовать аннотацию @Query, но она ограничена ключом-значением, а не коллекцией.

Я хочу узнать, как найти существующую коллекцию базы данных mongodb с интерфейсом mongorepository.


person Joseph Hwang    schedule 26.02.2019    source источник


Ответы (1)


Вы можете получить все имена коллекций, используя MongoOperations.getCollectionNames():

https://docs.spring.io/spring-data/mongodb/docs/current/api/org/springframework/data/mongodb/core/MongoOperations.html#getCollectionNames--

Невозможно получить эту информацию на основе репозитория данных Spring.

В обычных обстоятельствах также нет необходимости проверять, существует ли коллекция. Если он отсутствует, он будет создан Spring (обычно при запуске).

person Dan_Maff    schedule 26.02.2019
comment
Спасибо за ваш ответ. У меня есть еще один вопрос. Тогда как я могу подтвердить существующие базы данных в mongodb. Есть ли в MongoRepository API, который получает списки существующих баз данных mongodb? - person Joseph Hwang; 27.02.2019
comment
Нет. Репозитории предназначены для запросов к одной конкретной коллекции. - person Dan_Maff; 27.02.2019