Ссылки против встраивания в MongoDB - PullRequest
0 голосов
/ 09 февраля 2011

Я пытаюсь выяснить, как лучше всего использовать MongoDB для очень маленького и простого варианта использования, но нахожу документы несколько запутанными.Мой документ должен отражать тот факт, что у пользователя может быть много писем.Если я следую документации , то самое очевидное и простое решение - использовать встраивания.Проблема в том, что я хочу проверить адрес электронной почты на предмет уникальности, что AFAIK невозможно при встраивании (конечно, я могу использовать карту / уменьшить, но это очень плохой выбор).не заслуживают их собственной коллекции, но, очевидно, встроенный объект не позволяет мне выполнить проверку (и если это произойдет, я действительно не верю, что она будет эффективной).Как бы вы разработали схему в этой ситуации?

1 Ответ

2 голосов
/ 09 февраля 2011

Вы можете определить индекс в подполе электронной почты с установленным {unique: true}.Это предотвратит сохранение нескольких копий адреса электронной почты в коллекции.

Например, предположим, что ваши документы выглядят примерно так:

db.users.findOne() => 
{ 
  "name" : "xxxx", 
  "emails" : [ 
     { address: "one@domain.com", validated: false },
     { address: "two@domain.com", validated: true }
  ]
}

Вы можете определить уникальный индекс в поле email.address следующим образом:

db.users.ensureIndex(['emails.address',1], {unique: true})

Теперь вы получите сообщение об ошибке, если вы попытаетесь вставить один и тот же адрес электронной почты дважды.Это также поможет вам оптимизировать поиск пользователей по их электронным адресам, которые в определенный момент будут полезны в вашем приложении.

...