Можно ли создать несколько уникальных и разреженных индексов с помощью API Azure Cosmos mongodb

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

Пример использования: разрешить пользователю регистрироваться по телефону или электронной почте

Проблема: Mongo db позволяет создавать такие индексы, и приложение работает должным образом при подключении к реальному экземпляру mongo 3.2. Однако с появлением космоса электронная почта становится уникальным, но не редким полем.

Есть ли способ достичь этого варианта использования с космосом через API mongodb? т.е. не прибегая к проверке уникальности с помощью запроса на выборку перед каждой вставкой.

Попытки: просмотр документации космоса мало что показал. Они утверждают, что поддерживают API mongo 3.2, и разреженные индексы не упоминаются в предостережениях. Создание уникально-разреженного индекса с createIndex не приведет к ошибке, а только создаст уникальный индекс. Создание еще одного аналогичного индекса в другом поле не вызывает ошибки, но даже не создает уникальный индекс. Создает нормальный индекс.

Обновление: получил ответ от службы поддержки Azure:

В настоящее время мы не поддерживаем разреженные индексы. Вы можете сделать это, то есть создать составной индекс со свойством телефона и электронной почты.

Я не думаю, что составной индекс поможет мне с моим вариантом использования, поскольку я хочу, чтобы и телефон, и электронная почта были глобально уникальными в коллекции, а не только их комбинация.


person channikhabra    schedule 08.10.2018    source источник


Ответы (1)


Можете ли вы просмотреть эту ветку форума Stack Overflow: Уникальный разреженный индекс Mongodb

Сделайте следующее:

var UserSchema = new Schema({ // ... email: {type: String, default: null, trim: true, unique: true, sparse: true}, // ... });

Примечание: unique: true, sparse: true

person Mike Ubezzi MSFT    schedule 08.10.2018
comment
Мы делаем то же самое, и это работает в реальном mongodb. Однако проблема связана с CosmosDB. Я хочу знать, возможно ли это вообще в Cosmos, потому что документация здесь не поможет. - person channikhabra; 09.10.2018