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

nop*_*ole 11 mongodb mongoid

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

db.analytics.ensureIndex({page: 1, some_id: 1, ga_date: -1}, {unique: true});
Run Code Online (Sandbox Code Playgroud)

但我认为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
Run Code Online (Sandbox Code Playgroud)

做一个

rake db:create_indexes
Run Code Online (Sandbox Code Playgroud)

但是,是否可以插入重复记录?

更新:这很奇怪,但是我在MongoDB shell中添加了索引并删除了集合,然后在MongoDB Shell或Mongoid中重新创建了索引,现在我可以将集合放到MongoDB shell中,然后rake创建索引,并使用mongoid两次添加相同的文档,mongod会说重复键的错误.

aga*_*ate 7

您是否使用常规方式保存模型?喜欢:

page_analyitc.save

如果你使用这种方式保存模型,mongoid将不会给出任何错误信息.(如果在mongodb上有一个重复的键)

所以正确的方法是使用:

page_analyitc.safely.save

它会引发如下错误:

Mongo :: OperationFailure:11001:更新时E11001重复键

希望这些信息可以帮到你.