MongoDB уникальная проверка электронной почты в нескольких группах (индексация ,partalFilterExpression) - PullRequest
0 голосов
/ 30 января 2020

У меня есть коллекция пользователей MongoDB с документами, которые выглядят следующим образом:

# user1
{
    _id: 'user1',
    group: 'group1',
    email: 'user1@example.com'
}
# user 2
{
    _id: 'user2',
    group: 'group2',
    email: 'user1@example.com'
}
# user 3
{
    _id: 'user3',
    group: 'group1',
    email: null
}
# user 4
{
    _id: 'user4',
    group: 'group1',
    email: null
}
# user 5 - should throw duplicate key error as they have the same email as user1 in group 1 
{
    _id: 'user5',
    group: 'group1',
    email: 'user1@example.com'
}

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

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

Пример уникальных индексов:

  • group1__myemail@example.com
  • group2__myemaill@example.com
  • group1__null

Я надеялся выполнить sh, используя частичный индекс и частичное выражение выражения, аналогичное тому, как оно используется здесь MasterAM: { ссылка }

Однако это решение работает только для одного поля, где я пытаюсь сделать sh нечто похожее, но с двумя полями (группа и электронная почта).

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

db.user.createIndex(
   { group: 1, email: 1 },
   { unique: true, partialFilterExpression: { email: { $regex: /group/ } } }
)

Однако это выглядит так $ regex не поддерживается как выражение для частичного фильтра.

Любая помощь будет по достоинству оценена

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...