2016-07-20 8 views
6

मैं एक विशिष्ट समय पर एक दस्तावेज़ को हटाने में देख रहा हूं।विशिष्ट समय पर मोंगोडीबी दस्तावेज़ हटाएं

const TestSchema = new Schema({ 
expire_at: { 
type: Date, 
}, 
}, { 
timestamps: true, 
}); 
TestSchema.index({expire_at: 1}, {expireAfterSeconds: 0}); 

पोस्ट

const test = new TestSchema(this.request.body); 
    test.expire_at = test.end_time; 

    try { 
    yield test.save(); 
    } catch (error) { 
    this.status = 409; 
    this.response.body = error.errors; 
    return; 
    } 

    this.response.body = test; 
    this.status = 201; 

यह प्रतीत नहीं होता है कि दस्तावेजों समय expire_at में निर्दिष्ट हटा दें। 2016-07-20T05: 01: 19.567Z

+0

आप कोड आप इस स्कीमा का उपयोग कर एक नया दस्तावेज़ सम्मिलित करने के लिए प्रयोग कर रहे हैं बता सकते हैं? –

+0

@ केविन एडिस्टम्भा ने POST अनुरोध के साथ प्रश्न को अद्यतन किया। – safaiyeh

+3

कृपया मोंगो खोल में लॉग इन करें और db.users.find() चलाएं। सुंदर(), उस दस्तावेज़ को कॉपी करें जिसे हटाया नहीं जा रहा है और आपकी पोस्ट में जोड़ें। Db.users.getIndexes() को जबरदस्त करने में सहायक भी होगा। – helmy

उत्तर

3

हटाने की प्रक्रिया के लिए 60 सेकंड के बाद चलता है

मैं इस तिथि प्रारूप का उपयोग कर रहा हूँ। तो विलोपन समय बीत जाने के बाद 59 सेकंड के लिए दस्तावेज़ हो सकता है।

+0

हां, मुझे पता है। 60 सेकेंड के बाद, दस्तावेज़ हटा नहीं गया। – safaiyeh

+0

मेरा मानना ​​है कि आप mongodb का उपयोग कर रहे हैं> 2.2 – Amit

+0

मैं मोंगोस बनाम 4.4.17 और मोंगोड वी 3.0.12 – safaiyeh

2

जैसा कि अमित ने नोट किया, टीटीएल इंडेक्स को समाप्ति के समय डेटा हटाने की गारंटी नहीं है; डेटा समाप्त करने के लिए पृष्ठभूमि कार्य हर 60 सेकंड चलाएगा।

पृष्ठभूमि कार्य की अवधि समाप्त हो दस्तावेजों को हटा प्रत्येक 60 सेकंड चलाता है:

पृष्ठभूमि कार्य भी प्रदर्शन विवाद और काम का बोझ है, जो डेटा तक इस खिड़की से परे अस्तित्व के लिए पैदा कर सकता है से प्रभावित हो सकते हैं। नतीजतन, दस्तावेज की समाप्ति और पृष्ठभूमि कार्य के चलते अवधि के दौरान दस्तावेज़ संग्रह में रह सकते हैं।

क्योंकि हटाने आपरेशन की अवधि आपके mongod उदाहरण के काम का बोझ पर निर्भर करता है, डेटा पृष्ठभूमि कार्य के रन के बीच 60 सेकंड की अवधि से परे कुछ समय के लिए मौजूद हो सकता है समाप्त हो गई है।

Source

8

इस दस्तावेज़ को नष्ट करेगा दो घंटे में:

const TestSchema = new Schema({ 
    expire_at: {type: Date, default: Date.now, expires: 7200} 
}) 

//expired in 2 hours 
5

MongoDB दस्तावेज़ को हटाने के लिए विशिष्ट समय में आप टीटीएल (जीने के लिए समय) उपयोग कर सकते हैं। टीटीएल इंडेक्स विशेष एकल-फ़ील्ड इंडेक्स हैं जो मोंगोडीबी कुछ निश्चित समय के बाद संग्रह से दस्तावेजों को स्वचालित रूप से हटाने के लिए उपयोग कर सकते हैं।

तो आप की तरह एक टीटीएल सूचकांक बनाने की जरूरत: (मोंगो शेल कमांड)

db.yourCollecName.createIndex({"expire_at": 1 }, { expireAfterSeconds: 5 }); 

या आप इस सूचकांक

TestSchema.createIndex({"expire_at": 1 }, { expireAfterSeconds: 5 }); 

तो MongoDB हर 60 सेकंड के बाद जाँच बनाने के लिए नेवला उपयोग कर सकते हैं और यदि expire_at दिनांक दिनांक वर्तमान दिनांक समय से कम है तो यह रिकॉर्ड 5 सेकंड के बाद हटा दिया जाएगा।

टीटीएल सूचकांक गारंटी नहीं है कि डेटा की समय सीमा समाप्त हटा दिया जाएगा तुरंत समाप्ति पर। दस्तावेज़ के समय के बीच देरी हो सकती है और उस समय जब मोंगोडीबी दस्तावेज़ को डेटाबेस से हटा देता है।

पृष्ठभूमि कार्य जो समाप्त हो चुके दस्तावेज़ों को हटाता है हर 60 सेकंड चलाता है। नतीजतन, दस्तावेज की समाप्ति और पृष्ठभूमि कार्य के चलते अवधि के दौरान दस्तावेज़ संग्रह में रह सकते हैं।

TTL Indexes

एनबी: उपयोग createIndex बजाय index

संबंधित मुद्दे