2010-09-15 57 views
11

在MongoDB的外殼,如果我做了以下內容,然後創建了索引,並且還可以防止插入重複記錄:爲什麼MongoDB可以創建唯一的索引,但Mongoid不能?

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的Shell或Mongoid指數,現在我可以刪除MongoDB中殼收集,然後rake創建索引,並使用mongoid兩次添加相同的文檔,並且mongod會爲重複鍵聲明錯誤。

+0

你使用的是什麼版本的mongoid? – 2011-04-26 14:15:03

回答

7

你用普通的方式來保存你的模型嗎?像:

page_analyitc.save

如果你用這種方式來節省模式,mongoid不會給任何錯誤信息(如果有對MongoDB的重複鍵)

所以正確的方法來做到這一點。使用:

page_analyitc.safely.save

這將引發類似的錯誤:

蒙戈:: OperationFailure:11001:E11001 上更新重複鍵

希望這些信息可以幫助你。

相關問題