Trong vỏ MongoDB, nếu tôi làm như sau, sau đó một chỉ số được tạo ra, và cũng có thể ngăn chặn hồ sơ trùng lặp khỏi bị chèn vào:Tại sao MongoDB có thể tạo chỉ mục duy nhất nhưng Mongoid không thể?
db.analytics.ensureIndex({page: 1, some_id: 1, ga_date: -1}, {unique: true});
Nhưng tôi nghĩ Mongoid thể làm tương tự: http://mongoid.org/docs/indexing/
Vì vậy, tôi có:
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
và làm một
rake db:create_indexes
nhưng vẫn có thể chèn bản ghi trùng lặp?
Cập nhật: nó khá lạ, nhưng sau khi tôi thêm chỉ mục trong trình MongoDB và thả bộ sưu tập, và sau đó tạo lại chỉ mục trong MongoDB Shell hoặc Mongoid, bây giờ tôi có thể thả bộ sưu tập trong MongoDB shell và sau đó cào tạo chỉ mục và sử dụng mongoid để thêm cùng một tài liệu hai lần và mongod sẽ báo lỗi cho khóa trùng lặp.
bạn đang sử dụng phiên bản mongoid nào? –