MongoDB में ऐसा करने का कोई आसान तरीका नहीं है। मैंने एक वैकल्पिक विकल्प तैयार किया है जो आपके काम आ सकता है। यदि आपकी तिथियां अलग-अलग चरणों में आती हैं, जैसे यदि यह बुकिंग एप्लिकेशन के लिए है जहां उपयोगकर्ता दिन या घंटे के अनुसार ऑब्जेक्ट आरक्षित करते हैं, तो आप अद्वितीय इंडेक्स और मल्टीकी इंडेक्स के संयोजन का उपयोग कर सकते हैं। उदाहरण के लिए, मान लीजिए कि आरक्षण दिन के हिसाब से है। जॉन क्यू 11 अक्टूबर से 14 अक्टूबर तक के लिए आरक्षित है। यह साल के 281वें से 284वें दिनों जैसा कुछ है - आइए मान लें कि ठीक यही दिन है। आरक्षण फ़ील्ड को आरक्षित दिनों की एक सरणी के रूप में सहेजें
> db.reservations.insert({ "span" : [ 281, 282, 283, 284 ] })
span
. पर एक अद्वितीय अनुक्रमणिका रखें फ़ील्ड.
> db.reservations.ensureIndex({ "span" : 1}, { "unique" : 1 })
अब आप उस दस्तावेज़ को सम्मिलित नहीं कर सकते जिसकी अवधि में उन दिनों में से कोई भी दिन है:
> db.reservations.insert({ "span" : [ 279, 280, 281, 282 ] })
// unique key error
यह आपके लिए वर्ष को ध्यान में रखने के लिए कुछ अतिरिक्त ट्वीकिंग के साथ काम कर सकता है, या यह उदा। room_id
होटल बुकिंग के लिए।
दूसरा तरीका सिर्फ क्लाइंट साइड पर चेक को समन्वित करना है। यदि आपके पास कई क्लाइंट हैं जो एक-दूसरे से बिल्कुल भी बात नहीं करते हैं, तो मुझे लगता है कि ऐसा करने का सबसे अच्छा तरीका डेटाबेस में "लॉक" साझा करना होगा:findAndModify
lock
में एक दस्तावेज़ लॉक की जांच और अधिग्रहण करने के लिए संग्रह। एक बार जब क्लाइंट के पास उस दस्तावेज़ पर एक फ़ील्ड बदलकर लॉक हो जाता है, तो वह एक क्वेरी के साथ ओवरलैप के लिए जाँच कर सकता है और फिर यदि सब कुछ ठीक है तो सम्मिलित करें, फिर लॉक दस्तावेज़ पर फ़्लैग को फिर से बदलकर लॉक को छोड़ दें।