Как создать индекс 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")))