Как создать индекс mongo для обеспечения того, что поле никогда не является нулевым/отсутствующим/пустым?
У меня есть поле в сущности, которое должно присутствовать, но не обязательно уникально.
Есть ли способ принудить это ограничение в Монго?
Я понимаю, что коллекции mongo являются схематическими, и единственная схема, которую может иметь коллекция, - это схема индексов. Но я не вижу, есть ли опция индекса, чтобы убедиться, что значение поля не пустое, где пустое значение поля удовлетворяет следующему выражению javascript:
!value && value !== 0 && value !== false
Ответы
Ответ 1
Только по индексу UNIQUE вы можете отчасти издеваться над этим. Вы можете создать документ с записью с отсутствующим полем/значением и создать документ со значением NULL в индексе и НЕ разрешить дальнейшие отсутствующие значения.
Так как ваше требование для ключа NON UNIQUE, я не думаю, что на данный момент у вас есть опция в MONGODB (v2.2), чтобы убедиться, что значения должны присутствовать в индексированном столбце.
Ответ 2
В mongodb только поле _id
может удовлетворить ваши требования. Индексация не кажется хорошей идеей (ни одно из возможных) для этой проблемы.
Я думаю, вам нужно обеспечить соблюдение этого правила в операции вставки и обновления в вашем приложении, а не просить mongodb смотреть его за вас.
Ответ 3
Это может быть ответ, который вы хотели (в Java/Kotlin):
col.createIndex(Document("note", 2), IndexOptions()
.partialFilterExpression(Filters.and(
Filters.gt("note", ""),
Filters.exists("note")))