Как программно создать индекс для динамической коллекции Mongo? ( Java Spring Data MongoDB)

#java #mongodb

#java #mongodb

Вопрос:

Мне нужна помощь в этом, вот мой класс документа:

 @Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Document(collection = "#{@dateService.getCurrentDate()}")
@JsonInclude(JsonInclude.Include.NON_NULL)
public class LogDocument {
    private ObjectId _id;
    private String log;
    private String key;
}
  

Как вы можете видеть, имя моей коллекции является динамическим в зависимости от даты, например 2020-10-05 .

Я хочу создать уникальный индекс для ключа. КАК?

Когда имя коллекции исправлено, я могу просто выполнить следующее в классе конфигурации mongo:

 mongoTemplate.indexOps("{collection name}").ensureIndex(indexDefinition.unique());
  

но поскольку коллекция динамическая, мне нужен способ запускать a PostConstruct для каждого создания новой коллекции, чтобы я мог создать индекс.

Комментарии:

1. Если вы делегируете имя коллекции spring, возможно, вам следует позволить spring управлять вашим индексом с индексированной аннотацией и не забудьте включить автоиндексацию

Ответ №1:

Ответ заключается в простом использовании аннотаций

 @Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
//For Compound index: 
@CompoundIndexes({
        @CompoundIndex(name = "key_app", def = "{'key' : 1, 'app': 1}")
})
@Document(collection = "#{@dateService.getCurrentDate()}")
@JsonInclude(JsonInclude.Include.NON_NULL)
public class LogDocument {
    private ObjectId _id;
    private String log;
    //For a unique index on one field: 
    // @Indexed(unique = true)
    private String key;
    private String app;
}