#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;
}