I и хранение объектов Doc в хранилище MongoDB гарантируя, что свойство штрих-кода является уникальным по коллекции:Springdata MongoDB автоматически генерирует и нежелательная уникальный индекс в поддокументами
@Document(collection = "Doc")
public class Doc {
@Id
private String id;
@Indexed(unique = true)
private String barcode;
...
}
Я также хранить коллекцию DocAudit, которая хранит списки Док, как поддокументы:
@Document(collection = "DocAudit")
public class DocAudit {
@Id
private String id;
private List<Doc> docs;
...
}
Как генерируется DocAudit запись, то же док может присутствовать в списке документов два или более записей DocAudit.
@Indexed (уникальный = истина) на свойства штрих-кода объекта Doc автоматически генерировать индексы MongoDB на Doc.barcode (по желанию) и DocAudit.docs.doc.barcode (паразитной)
Какой самый лучший способ избежать автоматической генерации нежелательного индекса? Как можно лучше удалить нежелательный индекс, как только он будет создан?
Спасибо @Wizzard. Я надеялся, что в Spring-data.mongodb есть какая-то магия, которая обойдет эту проблему. Я решил проблему, выполнив абстрактный класс BaseDoc без поля штрих-кода, а затем расширив его с индексированным полем штрих-кода в фактическом классе Doc. Я также создал NestedDoc, который расширяет BaseDoc с помощью неиндексированного поля штрих-кода. DocAudit использует реализацию NestedDoc, чтобы избежать нежелательного индекса. – dgb
@dgb. Технически spring-data-mongodb может выполнить ваше ожидание, добавив к аннотации ** (с индексом **) дополнительный параметр (например, ** наследуемый **). Но все же есть другие проблемы, например, один подкласс не хочет наследовать эту функцию, но хочет еще один подкласс. Другой способ может быть реализован путем создания новой аннотации, чтобы указать, наследует ли определенные функции от суперкласса или нет. Но, похоже, это осложнит разработку кода после нескольких типов иерархии наследования. Наконец, теперь ваш текущий дизайн лучше. :) – Wizard