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 シェルまたは Mongoid でインデックスを再作成した後、MongoDB シェルでコレクションを削除してから、rake を作成できます。インデックスを作成し、mongoid を使用して同じドキュメントを 2 回追加すると、mongod は重複キーのエラーを表示します。