在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会说重复键的错误.
您是否使用常规方式保存模型?喜欢:
page_analyitc.save
如果你使用这种方式保存模型,mongoid将不会给出任何错误信息.(如果在mongodb上有一个重复的键)
所以正确的方法是使用:
page_analyitc.safely.save
它会引发如下错误:
Mongo :: OperationFailure:11001:更新时E11001重复键
希望这些信息可以帮到你.
| 归档时间: |
|
| 查看次数: |
3324 次 |
| 最近记录: |