2010-09-15 13 views
11

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 खोल में संग्रह ड्रॉप कर सकते हैं , और उसके बाद सूचकांक बनाते हैं, और दो दस्तावेज़ों को दो बार जोड़ने के लिए मोंगोइड का उपयोग करते हैं, और मोंगोड डुप्लिकेट कुंजी के लिए त्रुटि कहेंगे।

+0

मैंगॉइड का कौन सा संस्करण आप उपयोग कर रहे हैं? –

उत्तर

7

क्या आपने अपना मॉडल सहेजने के सामान्य तरीके का उपयोग किया था? जैसा:

page_analyitc.save

आप मॉडल को बचाने के लिए इस तरह से उपयोग करते हैं, mongoid किसी भी त्रुटि संदेश नहीं देंगे

तो यह करने के लिए सही तरीका (यदि वहाँ MongoDB पर एक नकली चाबी है)। उपयोग कर रहा है:

:

page_analyitc.safely.save

ऐसा लगता है कि एक त्रुटि बढ़ा देंगे

मोंगो :: OperationFailure: 11001: E11001 अद्यतन पर नकली चाबी

आशा इन जानकारी आप कर सकते हैं।

0

जब आप अपने दस्तावेज़ में index जोड़ते हैं, तो mongoid स्वचालित रूप से कोई भी अनुक्रमणिका नहीं बनाते हैं। इंडेक्स बनाने के लिए, आपको रेक दस्तावेज़ rake db:mongoid:create_indexes चलाने की आवश्यकता है क्योंकि आप नए दस्तावेज़ http://mongoid.org/en/mongoid/docs/indexing.html में देख सकते हैं।

संबंधित मुद्दे