Почему MongoDB может создать уникальный индекс, а Mongoid — нет?

В оболочке MongoDB, если я сделаю следующее, то будет создан индекс, а также предотвращение вставки повторяющихся записей:

db.analytics.ensureIndex({page: 1, some_id: 1, ga_date: -1}, {unique: true});

Но я думал, что Mongoid может сделать то же самое: http://mongoid.org/docs/indexing/

Так что я:

class PageAnalytic < Analytic
  include Mongoid::Document
  field :page, :type => String
  field :some_id, :type => Integer
  field :ga_date, :type => Time
  field :pageviews, :type => Integer
  field :timeOnPage, :type => Integer
  index(
    [
      [ :page, Mongo::ASCENDING ],
      [ :some_id, Mongo::ASCENDING ],
      [ :ga_date, Mongo::DESCENDING ]
    ],
    :unique => true
  )
end

и сделать

rake db:create_indexes

но все же дубликаты записей можно вставлять?

Обновление: довольно странно, но после того, как я добавил индекс в оболочке MongoDB и удалил коллекцию, а затем пересоздал индекс либо в MongoDB Shell, либо в Mongoid, теперь я могу удалить коллекцию в MongoDB shell, а затем rake создайте индекс и используйте mongoid, чтобы дважды добавить одни и те же документы, и mongod сообщит об ошибке для дублирующего ключа.


person nonopolarity    schedule 15.09.2010    source источник
comment
какую версию монгоида вы используете?   -  person Miguel Ping    schedule 26.04.2011


Ответы (2)


Вы использовали обычный способ сохранения вашей модели? Нравится:

page_analyitc.save

Если вы используете этот способ для сохранения модели, mongoid не выдаст никакого сообщения об ошибке (если в mongodb есть дубликат ключа)

Итак, правильный способ сделать это - использовать:

page_analyitc.safely.save

Это вызовет ошибку, например:

Mongo::OperationFailure: 11001: повторяющийся ключ E11001 при обновлении

Надеюсь, эта информация поможет вам.

person agate    schedule 27.04.2011

Когда вы добавляете index в свой документ, монгоид не будет автоматически создавать индекс. Чтобы создать индекс, вам нужно запустить задачу rake rake db:mongoid:create_indexes, как вы можете видеть в новых документах http://mongoid.org/en/mongoid/docs/indexing.html .

person Arthur Neves    schedule 04.06.2013