为什么MongoDB可以创建唯一索引,而Mongoid不能?

为什么MongoDB可以创建唯一索引,而Mongoid不能?,mongodb,mongoid,Mongodb,Mongoid,在MongoDB shell中,如果我执行以下操作,则会创建索引,并防止插入重复记录: db.analytics.ensureIndex({page: 1, some_id: 1, ga_date: -1}, {unique: true}); 但我认为Mongoid也能做到这一点: 因此,我: class PageAnalytic < Analytic include Mongoid::Document field :page, :type => String fie

在MongoDB shell中,如果我执行以下操作,则会创建索引,并防止插入重复记录:

db.analytics.ensureIndex({page: 1, some_id: 1, ga_date: -1}, {unique: true});
但我认为Mongoid也能做到这一点:

因此,我:

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
但仍然可以插入重复记录


更新:这很奇怪,但在我在MongoDB shell中添加索引并删除集合,然后在MongoDB shell或Mongoid中重新创建索引之后,现在我可以在MongoDB shell中删除集合,然后rake创建索引,并使用Mongoid添加相同的文档两次,mongod会说复制密钥错误。

您是否使用常规方法保存模型?比如:

page\u分析保存

若使用这种方式保存模型,mongoid不会给出任何错误消息。(若mongodb上有重复的密钥)

因此,正确的方法是使用:

page\u安全分析。保存

它将引发如下错误:

Mongo::操作故障:11001:E11001 更新时重复密钥


希望这些信息能对您有所帮助。

当您在文档中添加
索引时,mongoid不会自动创建任何索引。为了创建索引,您需要运行rake任务
rake db:mongoid:create_index
,正如您在新文档中看到的那样。

您使用的是什么版本的mongoid?
rake db:create_indexes