MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

मोंगो डीबी और आईडी समस्या में सुधार

मुझे इसी तरह की समस्या का सामना करना पड़ा है। मैं आधिकारिक सी # ड्राइवर का उपयोग कर दस्तावेजों को ऊपर उठाना चाहता था। मेरे पास इस तरह की एक कक्षा थी:

public class MyClass
{
    public ObjectId Id { get; set; }
    public int Field1 { get; set; }
    public string Field2 { get; set; }
}

कंसोल में मैं लिखूंगा:db.collection.update({Field1: 3},{Field1: 3, Field2: "value"}) और यह काम करेगा। सी#में मैंने लिखा:

collection.Update(Query.EQ("Field1", 3),
                Update.Replace(new MyClass { Field1 = 3, Field2 = "value" }),
                UpdateFlags.Upsert);

और यह काम नहीं किया! क्योंकि ड्राइवर में अपडेट स्टेटमेंट में खाली आईडी शामिल होती है और जब मैं दूसरे दस्तावेज़ को फ़ील्ड 1 अपवाद के विभिन्न मान के साथ ऊपर रखता हूं E11000 duplicate key error index फेंक दिया जाता है (इस मामले में मोंगो _id के साथ एक दस्तावेज़ सम्मिलित करने का प्रयास करता है जो पहले से ही डीबी में मौजूद है)।

जब मैंने खुद से _id जनरेट किया (जैसे विषय स्टार्टर) मुझे उसी अपवाद का सामना करना पड़ा (mongo cannot change _id of a document ) फ़ील्ड1 के मौजूदा मान वाली वस्तुओं को ऊपर करने पर।

समाधान आईडी संपत्ति को विशेषता द्वारा चिह्नित करना है [BsonIgnoreIfDefault] (और इसे प्रारंभ नहीं करें)। इस मामले में ड्राइवर अपडेट स्टेटमेंट में _id फ़ील्ड को छोड़ देता है और यदि आवश्यक हो तो MongoDb आईडी जेनरेट करता है।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. अजगर का उपयोग करके मोंगोडब से संग्रहीत छवि को पुनः प्राप्त करें

  2. MongooseError:कनेक्ट होने के दौरान आप कई बार `mongoose.connect ()` नहीं कर सकते हैं

  3. लुमेन - मोंगोडब - जेन्सेजर्स/लारवेल-मोंगोडब - पोस्टमैन

  4. नेवला findOneAndUpdate और upsert रिटर्न कोई त्रुटि नहीं, कोई दस्तावेज़ प्रभावित नहीं

  5. mongorestore न आया हुआ अपवाद:सिंटैक्स त्रुटि