यह वास्तव में थोड़ा चौड़ा है लेकिन मैं व्यापक स्ट्रोक की पेशकश कर सकता हूं। चूंकि MongoDB संग्रह स्तर लॉकिंग का उपयोग करता है डिफ़ॉल्ट भंडारण इंजन के साथ। WiredTiger स्टोरेज इंजन भी उपलब्ध है जो को लागू करता है। दस्तावेज़ स्तरीय लॉकिंग . लेकिन मूल रूप से सभी रिलीज में "लॉकिंग" का कुछ स्तर होता है जो प्रत्येक अनुरोध पर होता है। आपकी वास्तविक थ्रूपुट आवश्यकताओं के आधार पर स्तर जितना बेहतर होगा उतना ही बेहतर होगा।
अनिवार्य रूप से कोई भी दो अनुरोध वास्तव में एक ही समय में नहीं होते हैं क्योंकि वे जारी होने तक किए गए लॉक पर "ब्लॉक" करेंगे। तो वह मान जो लौटाया जाएगा (जैसे कि findAndModify()
request ), उस अनुरोध के लिए "वर्तमान स्थिति" के रूप में होगा।
तो इस तरह के अनुरोध पर पहले निष्पादित किया गया कथन 2 का मान लौटाएगा, और अगला निष्पादित विवरण 3 का मान लौटाएगा। डेटाबेस में अंतिम स्थिति यह है कि मान वर्तमान में 3 होगा।
तो एक ही समय में कुछ "संशोधित" करने का कोई तरीका नहीं है, और अंतिम स्थिति वह होगी जो "सभी" अनुरोध जारी किए जाने के बाद होती है। तो $inc
और अन्य ऑपरेटर ठीक वैसा ही करते हैं जैसा उन्हें करना चाहिए, और उस समय दस्तावेज़ की स्थिति के आधार पर सामग्री को संशोधित करते हैं जब वह वास्तव में इसे एक्सेस करने में सक्षम था।