2012-09-11 7 views
8

मैं mongodb के लिए नौसिखिया हूँ।मोंडोडब डालने के बिना _id फ़ील्ड

  1. मुझे स्वचालित रूप से उत्पन्न होने वाले _id फ़ील्ड के बिना एक दस्तावेज़ डालने की आवश्यकता है।

  2. मैं अद्वितीय के रूप में क्षेत्र Tenant_id सेट या Tenant_id करने के लिए "_ id" क्षेत्र बदलने की जरूरत की जरूरत है।

इसे कैसे करें?

कुछ इस

 Tenant 
     {Tenant_id: 123, Tenant_info: ...} 

उत्तर

22

डिफ़ॉल्ट रूप से, सभी नियमित संग्रह स्वचालित रूप से एक _ id क्षेत्र यदि यह अनुपस्थित है सम्मिलित: तो तुम सिर्फ मैन्युअल _ id जब आप दस्तावेज़ सम्मिलित सेट कर सकते हैं।

हालांकि, इस व्यवहार पर स्पष्ट रूप गलत पर autoIndexId पैरामीटर की स्थापना करके, जब आप संग्रह बनाने बदला जा सकता है।

> db.createCollection("noautoid", { autoIndexId: false }) 
{ "ok" : 1 } 

फिर आप _id फ़ील्ड के बिना दस्तावेज़ सम्मिलित कर सकते हैं। लेकिन कुछ ड्राइवर, जैसे जावास्क्रिप्ट एक (और इसलिए मोंगो कंसोल), _id फ़ील्ड को स्वयं से जोड़ें। मोंगो कंसोल में, आप यह कर सकते हैं:

autoIndexId क्षेत्र के बारे में
> db.noautoid._mongo.insert(db.noautoid._fullName, {name: "Jack"}) 
> db.noautoid.find() 
{ "name" : "Jack" } 

अधिक जानकारी MongoDB documentation में पाया जा सकता। यह पृष्ठ कैप्ड कलेक्शन के बारे में है लेकिन autoIndexId फ़ील्ड नियमित और कैप्ड संग्रह दोनों के लिए आम है।

+0

तरह iam हो रही त्रुटि अपने काम नहीं कर रहा ... –

+2

अब इसकी अनुमति नहीं है - प्रतिकृति के लिए _id फ़ील्ड आवश्यक है और इसलिए हमेशा मौजूद होना चाहिए। –

3

_id क्षेत्र की तरह एक मोंगो दस्तावेज़ के लिए डिफ़ॉल्ट कुंजी जब तक आप छाया हुआ संग्रह का उपयोग कर रहे हैं।

यह एक umutable क्षेत्र है जो किसी दस्तावेज़ संरचना से बाहर नहीं छोड़ा जा सकता है।

मैं _id बजाय के रूप में tennant_id का उपयोग कर की सिफारिश करेंगे।

2

हर MongoDB दस्तावेज़ को विशिष्ट क्षेत्र "_ id" होना आवश्यक है और यदि आप इसे तो प्रदान नहीं करते हैं यह अपने आप आपके लिए उत्पन्न हो जाएगा।

इस क्षेत्र का नाम बदलना संभव नहीं है।

आपका पास दो विकल्प हैं:

1) उत्पन्न _ id फ़ील्ड को अनदेखा और अपने खुद के tenant_id क्षेत्र का उपयोग करें (आपको लगता है कि मैदान पर एक अद्वितीय सूचकांक जोड़ने के लिए _ id में या 2) दुकान tenant_id मूल्य की आवश्यकता होगी) क्षेत्र (और इस तथ्य का लाभ उठाएं कि इसमें पहले से ही एक अनूठी अनुक्रमणिका है)। केवल यदि आप जब आप एक दस्तावेज़ डालने '_ id' खाने के लिए मान निर्दिष्ट नहीं करते

3

MongoDB स्वचालित रूप से '_ id' क्षेत्र उत्पन्न होगा।

db.tenants.insert({"_id" : 123, "Tenant_info" : ... }) 
1

किसी भी mongodb संग्रह में _id फ़ील्ड को हटाने का कोई तरीका नहीं है। के रूप में, @stephene ने कहा, मैं एक ही करने की कोशिश की है, लेकिन इस

> db.noautoid._mongo.insert(db.noautoid._fullName, {name: "Jack"}); 
2015-06-18T11:22:29.149+0530 E QUERY Error: insert needs 3 args 
at (shell):1:20 
संबंधित मुद्दे