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

mongoengine में एम्बेडेड दस्तावेज़ों की सूची अद्यतन कर रहा है

नहीं सूची फ़ील्ड के साथ आप किसी एकल क्वेरी में सूची में अप्सर्ट नहीं कर सकते हैं। $addToSet काम नहीं करेगा क्योंकि आपने post बदल दिया है तो आप मैच नहीं कर सकते। आप इसके चारों ओर कोड कर सकते हैं लेकिन यह एक दौड़ की स्थिति बनाता है जहां त्रुटि के अवसर की एक छोटी सी खिड़की होती है जैसे:

    class Post(EmbeddedDocument):
        uid = StringField(required=True)
        text = StringField(required=True)

    class Feed(Document):
        label = StringField(required=True)
        feed_url = StringField(required=True)
        posts = ListField(EmbeddedDocumentField(Post))

    Feed.drop_collection()

    Feed(
        label="label",
        feed_url="www.feed.com"
    ).save()

    post = Post(uid='1', text="hi")
    updated = Feed.objects(posts__uid=post.uid).update_one(set__posts__S=post)
    if not updated:
        Feed.objects.update_one(push__posts=post)

पहले हम अपडेट करने का प्रयास करते हैं और यदि यह मौजूद नहीं है तो हम सूची में आगे बढ़ते हैं - यह वह जगह है जहां एक और प्रक्रिया चलाने के लिए अवसर की एक खिड़की होती है और संभावित रूप से post को धक्का देती है सूची में।

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. स्प्रिंग डेटा MongoDb में नेस्टेड VariableOperators.mapItemsOf का उपयोग नहीं कर सकता

  2. मैं मोंगोज़ के साथ ऑब्जेक्ट आईडी कैसे उत्पन्न कर सकता हूं?

  3. $elemविशिष्ट के साथ मिलान करें

  4. 30 सेकंड से पुराने दस्तावेज़ के लिए MongoDB क्वेरी

  5. अपने MongoDB डेटा की सुरक्षा के लिए एन्क्रिप्शन का उपयोग कैसे करें