2012-09-15 16 views
6

मेरे पास एक संग्रह है जिसके लिए मुझे किसी भी इंडेक्स की आवश्यकता नहीं है। मैं सिर्फ उपयोगकर्ता खोज शब्द और तारीख संग्रहीत करता हूं, इसलिए मेरा संग्रह वास्तव में सरल है।क्या मैं डिफ़ॉल्ट मोंगोडीबी इंडेक्स को हटा सकता हूं?

class UserSearch { 

public string Term {get; set;} 
pulic DateTime Date {get;set;} 

} 

जब मैं एक उपयोगकर्ता खोज आइटम संग्रहीत करता हूं, तो मेरे संग्रह में _id और डिफ़ॉल्ट अनुक्रमणिका होती है।

मेरे ज्ञान से, उन "_id" फ़ील्ड को रैम में अनुक्रमित किया जाएगा, इसलिए मैं संग्रह के लिए राम स्मृति नहीं बिताना चाहता हूं जिसे मैं अभी स्टोर करता हूं और मैं हर 12 घंटों में कुछ गणना कर रहा हूं।

मैं इसे हटाने का प्रयास करता हूं, लेकिन मैं नहीं कर सकता।

var indexes = UserSearch(true).GetIndexes(); 

    //delete UserSearch Default Index 
    if(UserSearch(true).IndexExistsByName("_id_")) 
    { 
    UserSearch(true).DropIndexByName("_id_"); 
    } 

कोई सुझाव/समाधान?

उत्तर

12

नहीं, आप इसे हटा नहीं सकते हैं।

MongoDB documentation से, जोर मेरा;

_ id सूचकांक

छाया हुआ संग्रह को छोड़कर

सभी संग्रह के लिए, एक सूचकांक स्वतः _ id क्षेत्र के लिए बनाया जाता है। यह सूचकांक विशेष है और हटाया नहीं जा सकता। _id इंडेक्स अपनी चाबियों के लिए विशिष्टता को लागू करता है (शेडिंग के साथ कुछ स्थितियों को छोड़कर)।

1

आप एक बार बनाए गए _id अनुक्रमणिका को हटा नहीं सकते हैं। हालांकि आप विकल्प false पर db.createCollection का उपयोग करके का उपयोग करके _id इंडेक्स के बिना संग्रह बना सकते हैं लेकिन _id के बिना आप अपने संग्रह को दोहराना नहीं कर सकते हैं।

+0

असल में आपको प्रतिकृति या शेर्डिंग के लिए _id की आवश्यकता नहीं है। आप कोई अन्य इंडेक्स या कंपाउंड इंडेक्स सेट कर सकते हैं। –

+1

@AdrianLopez कृपया चेतावनी का ध्यान रखें: 'महत्वपूर्ण प्रतिकृति सेट के लिए, autoIndexId को गलत पर सेट न करें। 'Https://docs.mongodb.com/manual/reference/method/db.createCollection/#db.createCollection –

+0

मैंने अपने उत्तर में उस बिंदु को संबोधित किया @ केविन जॉन्सन – styvane