MongoDB обеспечить индекс по всем коллекциям? - PullRequest
1 голос
/ 14 сентября 2011

Можно ли вызывать sureIndex для всех коллекций (даже для коллекций, которые еще не были созданы)?

Например, допустим, у меня есть 3 коллекции в одной базе данных: "Лондон", "Нью-Йорк" и«Токио».У меня есть поле с именем "employee_username", которое должно быть уникальным для всех существующих и будущих коллекций.То есть, если кто-то с именем «susan» зарегистрирован как «employee_username» в «london», то он не может существовать в коллекции «newyork».Кроме того, если в будущем мне нужно будет создать новую коллекцию под названием «Гонконг», «Сьюзан» не может быть использована внутри «employee_username».

Возможно ли это?

Спасибо!


Да, спасибо за ваш ответ.

Однако MongoDB говорит: «Как правило, наличие большого количества коллекций не приводит к значительному снижению производительности и приводит к очень хорошей производительности».в [http://www.mongodb.org/display/DOCS/Using+a+Large+Number+of+Collections].

Приведенный выше пример является просто примером.Я планирую создать социальную базу данных с миллионами записей.Так что - согласно документации - я должен разделить на множество коллекций, насколько это возможно, по соображениям производительности.Поэтому, если я не могу создать уникальный индекс, который охватывает разные коллекции, я думаю, что я создам коллекцию «Адреса электронной почты», которая содержит только и ничего, кроме адресов электронной почты, с уникальной индексацией.

У кого-нибудь есть комментарии?(Мой подход учитывает производительность и оптимизацию как фактор № 1.)

Спасибо!

1 Ответ

3 голосов
/ 14 сентября 2011

MongoDB не поддерживает уникальные индексы, которые охватывают несколько коллекций, поэтому хорошим подходом здесь будет использование одной коллекции с уникальным индексом на employee_username с документами, имеющими такую ​​структуру:

пользователи

{
    _id: ObjectId("47cc67093475061e3d95369d"),
    location: "newyork",
    employee_username: "susan"
},
{
    _id: ObjectId("4dc9acea045bbf04348f9691"),
    location: "london",
    employee_username: "john"
}

Чтобы создать индекс:

db.users.ensureIndex ({employee_username: 1}, {unique: true});

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