У меня есть коллекция пользователей 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 не поддерживается как выражение для частичного фильтра.
Любая помощь будет по достоинству оценена