इसे पूरा करने के अन्य तरीके भी हो सकते हैं, लेकिन एक तरीका यह है कि आप अपने दस्तावेज़ों को संस्करणित करें, और केवल उस संस्करण के लिए अपडेट जारी करें जिसे उपयोगकर्ता ने पहले पढ़ा था (यानी, सुनिश्चित करें कि किसी और ने दस्तावेज़ को अपडेट नहीं किया है क्योंकि इसे अंतिम बार पढ़ा गया था)। पाइमोंगो का उपयोग करते हुए इस तकनीक का एक संक्षिप्त उदाहरण यहां दिया गया है:
>>> db.foo.save({'_id': 'a', 'version': 1, 'things': []}, safe=True)
'a'
>>> db.foo.update({'_id': 'a', 'version': 1}, {'$push': {'things': 'thing1'}, '$inc': {'version': 1}}, safe=True)
{'updatedExisting': True, 'connectionId': 112, 'ok': 1.0, 'err': None, 'n': 1}
उपरोक्त में ध्यान दें, कुंजी "n" 1 है, यह दर्शाता है कि दस्तावेज़ अपडेट किया गया था
>>> db.foo.update({'_id': 'a', 'version': 1}, {'$push': {'things': 'thing2'}, '$inc': {'version': 1}}, safe=True)
{'updatedExisting': False, 'connectionId': 112, 'ok': 1.0, 'err': None, 'n': 0}
यहां जहां हमने गलत संस्करण के खिलाफ अपडेट करने का प्रयास किया, कुंजी "एन" 0 है
>>> db.foo.update({'_id': 'a', 'version': 2}, {'$push': {'things': 'thing2'}, '$inc': {'version': 1}}, safe=True)
{'updatedExisting': True, 'connectionId': 112, 'ok': 1.0, 'err': None, 'n': 1}
>>> db.foo.find_one()
{'things': ['thing1', 'thing2'], '_id': 'a', 'version': 3}
ध्यान दें कि यह तकनीक सुरक्षित लेखन का उपयोग करने पर निर्भर करती है, अन्यथा हमें अद्यतन किए गए दस्तावेज़ों की संख्या को इंगित करने वाली एक पावती नहीं मिलती है। इस पर एक भिन्नता findAndModify
का उपयोग करेगी
आदेश, जो या तो दस्तावेज़ लौटाएगा, या None
(पायथन में) यदि क्वेरी से मेल खाने वाला कोई दस्तावेज़ नहीं मिला। findAndModify
आपको दस्तावेज़ के नए (अर्थात अपडेट लागू होने के बाद) या पुराने संस्करण को वापस करने की अनुमति देता है।