2011-12-14 8 views
22

यदि मैं मोंगो में संग्रह बनाता हूं, और इस संग्रह में दस्तावेज़ जोड़ने के बाद, मैं इस संग्रह में किसी दस्तावेज़ पर एक संख्या फ़ील्ड पर एक इंडेक्स बनाने के लिए ensureIndex() का उपयोग करता हूं, अगर मैं संग्रह छोड़ देता हूं, तो क्या मुझे इसे फिर से बनाना होगा सूचकांक?मोंगोडीबी में, यदि संग्रह गिरा दिया गया है, तो इंडेक्स स्वचालित रूप से भी गिराए गए हैं?

उत्तर

27

संक्षिप्त उत्तर: हाँ।

इंडेक्स संग्रह ड्रॉप पर गिर रहे हैं। आपको एक इंडेक्स को फिर से बनाना होगा।

आप संग्रह छोड़ना नहीं चाहते हैं लेकिन db.collection_name.remove({}) के साथ सभी आइटम हटाएं। यह अधिक संसाधन लेगा लेकिन अपनी अनुक्रमणिका छोड़ दें। दरअसल इसे सभी इंडेक्स डेटा को हटाना होगा। यही कारण है कि पूरे संग्रह को छोड़ना और इसके बाद इंडेक्स को फिर से बनाना अधिक पसंद है।

+1

क्या मैं खाली संग्रह पर एक इंडेक्स बना सकता हूं? – raffian

+1

हाँ आप कर सकते हैं। जब आप इंडेक्स बनाते हैं तो संग्रह बनाया जाएगा। –

+1

'निकालें()' बड़े संग्रह पर लंबा समय ले सकता है। 'ड्रॉप()' बहुत तेज़ है, लेकिन सभी इंडेक्स को हटाने का नकारात्मक हिस्सा है, जैसा कि पहले से ही नोट किया गया है। – dcrosta

1

संग्रह को छोड़ना, जैसा कि आप संदेह करते हैं, सभी संग्रहों को छोड़ देते हैं, इसलिए जब आप संग्रह को फिर से बनाते हैं (या तो स्पष्ट रूप से, या नए दस्तावेज़ जोड़कर स्पष्ट रूप से) आपको किसी भी इंडेक्स को फिर से बनाने की आवश्यकता होगी। _id पर डिफ़ॉल्ट अनुक्रमणिका आपके लिए स्वचालित रूप से बनाई गई है।

+1

ठीक है, समझा जाता है, क्या इंडेक्स() को एक ही संग्रह पर एकाधिक बार सुनिश्चित करने में कोई नुकसान है यदि सूचकांक पहले से मौजूद है? – raffian

+0

कोई नुकसान नहीं। यह जांचने के लिए मामूली प्रदर्शन प्रभाव है कि आप जिस इंडेक्स को सुनिश्चित करने का प्रयास कर रहे हैं वह पहले से ही है या नहीं। –

7

मैंने इसे 10 इंडेक्स के साथ संग्रह पर किया और मैन्युअल रूप से उनको पुनर्जीवित नहीं करना चाहता था। आप एक बूंद को पूरा और मोंगो खोल में निम्न तीन पंक्तियों से सूचकांक पुन: कर सकते हैं:

var indexes = db.collection.getIndexKeys().splice(1) 
db.collection.drop(); 
indexes.forEach(function(el){ db.collection.ensureIndex(el, {background:true}); }) 

यह अनूठा या विरल अनुक्रमणिका को संभालने के लिए बहुत चालाक नहीं है, लेकिन मुझे लगता है कि काफी का उपयोग करके समर्थन करने के लिए आसान होगा इसके बजाय getIndexes() का आउटपुट। मुझे इसकी आवश्यकता नहीं थी, इसलिए मैंने ऐसा नहीं किया।

विभाजन (1) सिर्फ आईडी पर इंडेक्स को निकालने के लिए है, क्योंकि यह स्वतः बनाया जाएगा।

+0

बहुत धन्यवाद, लेकिन '{background: true} 'ने मेरी अनुक्रमणिका को मिटा दिया, बिना यह महान काम करता है –

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

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