Индекс MongoDB с определенным значением поля

Добрый день!

У меня есть коллекция с такими документами, как

{
  account_id: "accountOne"
  state: stateOne
}

Я хочу убедиться, что существует только один документ с парой ID аккаунта<->состояние, где состояние равно состояниеОдин, но я хочу иметь много документов, в которых состояние равно любому значению, отличному от состояниеОдин.

Например, я хочу иметь эти данные в своей коллекции:

{
  account_id: "accountOne"
  state: stateOne
}

{
  account_id: "accountOne"
  state: stateTwo
}

{
  account_id: "accountOne"
  state: stateTwo
}

Если я сделаю индекс уникальный, например {account_id: 1, state: 1}, я получу ошибку. Есть ли способ сделать это через БД? Или я должен сделать это через мою сервисную логику?

Возможно, предоставьте нам команду, как вы создали файл index. И самый главный вопрос: Что вы подразумеваете под "я получу ошибку"? Пожалуйста, укажите ошибку, которую вы получаете!

Wernfried Domscheit 18.03.2022 11:05

Если я сделаю уникальный индекс для полей {account_id: 1, state: 1}, я не смогу создать несколько документов с "state: stateTwo" - при вставке я получу ошибку дублирующего индекса ключа

RedCollarPanda 18.03.2022 11:11

Каковы критерии, которые отличают stateOne от других состояний (кроме того, что может быть только одно stateOne, связанное с account_id).

prasad_ 18.03.2022 12:49
Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
0
3
18
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуй это:

db.collection.createIndex(
   { account_id: 1, state: 1 },
   { unique: true, partialFilterExpression: { state: stateOne } }
)

Другие вопросы по теме