在 MongoDB shell 中,如果我执行以下操作,则会创建一个索引,并且还可以防止插入重复记录:
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 shell 中添加索引并删除集合之后,然后在 MongoDB Shell 或 Mongoid 中重新创建索引后,现在我可以删除在MongoDB shell中收集,然后rake创建索引,并使用mongoid两次添加相同的文档,mongod会提示重复键错误。
最佳答案
您是否使用正常方式保存模型?喜欢:
page_analyitc.save
如果你用这种方式保存模型,mongoid不会报任何错误信息。(如果mongodb上有重复的key)
所以正确的做法是使用:
page_analyitc.safely.save
它会引发如下错误:
Mongo::OperationFailure: 11001: E11001 duplicate key on update
希望这些信息对您有所帮助。
https://stackoverflow.com/questions/3722746/
相关文章:
node.js - 在 docker 容器中安装 Mongoose
mysql - 在备份期间保持两个独立数据存储之间的完整性(MySQL 和 MongoDB)
javascript - 如何处理 MongoDB 键名中的点?
java - Spring数据mongodb审计不起作用..(Java配置)
node.js - mongodb错误: The 'cursor' option is requir
mongodb - 为什么 Spring Data MongoDB 无法实例化这种嵌套类型结构?
php - 如何在 Waterline 或 MongoDB 中选择、分组和加入