MongoDB индексы - PullRequest
       7

MongoDB индексы

3 голосов
/ 28 июня 2010

Я в процессе преобразования моего приложения на Rails для использования mongodb через mongoid. У меня есть два вопроса, касающихся индексов. Я думаю, что знаю ответ, но мне нужно подтверждение от кого-то, у кого больше опыта работы с mongodb.

Давайте рассмотрим следующий пример, где у меня есть одна реляционная связь между Users и Posts.

user.rb

class User  
    has_many_related :posts  
end

post.rb

class Post  
    belongs_to_related :user  
end

Теперь, когда я смотрю на индексы, созданные через интерфейс MongoHQ, я замечаю следующие два:

  1. Имя ключа: _id_
    Индексированное поле: _id
    Уникальный: <blank>
    Идентификатор гарантированно будет уникальным? Если так, то почему не уникальный набор. Если нет, как я могу установить это и мне нужно?

  2. Имя ключа: user_id_1
    Индексированное поле: user_id
    Уникальный: false
    Правильно ли я считаю, что индексированное поле является именем поля в коллекции? Просто хочу подтвердить, поскольку имя ключа имеет _1 после него.

Ответы [ 3 ]

3 голосов
/ 28 июня 2010

Да, _id в MongoDB всегда уникален.Это первичный ключ, поэтому настройка UNIQUE не требуется.

2 голосов
/ 12 октября 2012

Здесь очень четко описаны индексы в MongoDB Обзор индексации .

_id

Индекс _id - это уникальный индекс ** в поле _id, и MongoDB создаетэтот индекс по умолчанию для всех коллекций.Вы не можете удалить индекс _id.

Поле _id является первичным ключом для коллекции, и каждый документ должен иметь уникальное поле _id.Вы можете сохранить любое уникальное значение в поле _id.Значением по умолчанию _id является ObjectID для каждой вставки ()

** Хотя индекс _id уникален, метод getIndexes () не будет печатать unique: true в оболочке mongo.

1 голос
/ 16 февраля 2012

Если вы не укажете значение _id вручную в MongoDB, тогда для типа будет задан специальный тип данных BSON, состоящий из 12-байтового двоичного значения.

12-байтовое значение состоит из 4-байтовой метки времени, 3-байтового идентификатора компьютера, 2-байтового идентификатора процесса и 3-байтового счетчика. Благодаря такому дизайну это значение имеет достаточно высокую вероятность быть уникальным.

Ссылка: Полное руководство по MongoDB: База данных NoSQL для облачных и настольных вычислений (книга)

...