Как создать частичный уникальный индекс только для документов, которые не содержат поля? - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь создать уникальный индекс для коллекции. Этот уникальный индекс должен применяться только к документам, которые не содержат поле deleted_at.

Я пытался:

db.collection.createIndex({a: 1, b:1},
    {
        unique: true,
        partialFilterExpression: {
            deleted_at: {$exists: false}
        }
    }
)

Но возникает ошибка, говорящая, что not не поддерживается в createIndex (я думаю, $exists: false преобразуется в $not: {$exists: true}).

Затем я попытался обойти:

db.collection.createIndex({a: 1, b:1},
    {
        unique: true,
        sparse: false,
        partialFilterExpression: {
            deleted_at: {$type: 'null'}
        }
    }
)

Этот индекс действителен но не делает то, что я хочу. Это относится только к документам, которые содержат deleted_at, но имеют значение null. Это неприемлемо, потому что существующее приложение использует запросы с exists повсеместно, чтобы исключить удаленный материал, поэтому я не могу просто перенести данные в поле, в котором для них установлено значение null.

Is Mon go поддерживает способ создания индекса и применяет этот индекс только к документам , а не , содержащим указанное поле c?

Если ответа нет, как я могу Попробовать, из БД , уникальность элементов соединения? Мое приложение будет полагаться на ошибку БД в случае возникновения гонки при вставке элементов.

...