कैप्ड संग्रह निश्चित आकार के संग्रह होते हैं जो संग्रह के पूर्ण होने पर सबसे पुराने दस्तावेज़ों को अधिलेखित करके (प्रविष्टि आदेश के आधार पर) स्वचालित रूप से हटा देते हैं।
संकल्पनात्मक रूप से छायांकित संग्रह एक कतार के बजाय एक वृत्ताकार बफर होते हैं।
यह लगातार आदेश जानकारी के उपयोग के मामले के लिए उपयुक्त नहीं है - हटाए जाने पर एक कैप्ड संग्रह में दस्तावेज़ों को दोबारा डालने के लिए कोई "हुक" नहीं है, और यदि आपका कैप्ड संग्रह बहुत छोटा है तो आप ओवरराइट कर सकते हैं दस्तावेज़ संसाधित होने से पहले।
मुझे लगता है कि आप वास्तव में एक सामान्य (गैर-कैप्ड) संग्रह का उपयोग करना चाहते हैं।
स्थिति के आधार पर पुराने ऑर्डर हटाएं
यदि आप कुछ राज्य मूल्य के आधार पर आदेशों को हटाना चाहते हैं, तो आपको इसे अपने आवेदन कोड में संभालना चाहिए (उदाहरण के लिए, जब कोई आदेश "लंबित" से "संसाधित" स्थिति में चला जाता है तो जो भी सफाई की आवश्यकता होती है)।
समय के आधार पर पुराने/समाप्त ऑर्डर हटाएं
यदि आप किसी विशिष्ट समय पर पुराने/समाप्त ऑर्डर को स्वचालित रूप से हटाना चाहते हैं, तो एक अच्छा तरीका एक सामान्य संग्रह का उपयोग करना होगा जिसमें दस्तावेज़-स्तरीय समय-से-लाइव (TTL) समाप्ति , जैसे:
db.orders.ensureIndex( { "expireAt": 1 }, { expireAfterSeconds: 0 } )
फिर आप expireAt
. के आधार पर प्रत्येक ऑर्डर दस्तावेज़ के लिए समाप्ति को सेट (या विस्तारित) कर सकते हैं दिनांक। ध्यान दें कि यह एक उपयुक्त विकल्प नहीं हो सकता है यदि आपको expireAt
. दोनों की जांच करने की आवश्यकता है मान और स्थिति फ़ील्ड (TTL की समाप्ति पूरी तरह से प्रदान की गई दिनांक अनुक्रमणिका पर आधारित है)।