में मोंडोडीबी डेटाबेस कनेक्शन को बंद करने के लिए नोड MongoDB मूल चालक के माध्यम से नोडजेस और मोंगोडीबी के साथ काम करना। कुछ दस्तावेजों को पुनः प्राप्त करने और संशोधन करने की आवश्यकता है, फिर उन्हें वापस सुरक्षित करें। यह एक उदाहरण है:नोडजेस
db.open(function (err, db) {
db.collection('foo', function (err, collection) {
var cursor = collection.find({});
cursor.each(function (err, doc) {
if (doc != null) {
doc.newkey = 'foo'; // Make some changes
db.save(doc); // Update the document
} else {
db.close(); // Closing the connection
}
});
});
});
अतुल्यकालिक प्रकृति के साथ
, अगर दस्तावेज़ अपडेट करने की प्रक्रिया में अधिक समय लगता है, तो जब कर्सर दस्तावेजों के अंत तक पहुँच जाता है, डेटाबेस कनेक्शन बंद कर दिया है। डेटाबेस में सभी अपडेट सहेजे नहीं गए हैं।
यदि db.close()
छोड़ा गया है, तो सभी दस्तावेज़ सही तरीके से अपडेट किए गए हैं, लेकिन एप्लिकेशन लटकता है, कभी बाहर नहीं निकलता है।
मैंने एक पोस्ट को अद्यतनों की संख्या ट्रैक करने के लिए काउंटर का उपयोग करने का सुझाव दिया, जब शून्य पर वापस आना, फिर डीबी बंद करें। लेकिन क्या मैं यहाँ कुछ गलत कर रहा हूँ? इस तरह की स्थिति को संभालने का सबसे अच्छा तरीका क्या है? संसाधन को मुक्त करने के लिए db.close()
का उपयोग किया जाना चाहिए? या एक नया डीबी कनेक्शन खोलने की जरूरत है?
@realguess, भी वहाँ संगामिति utils मदद कर सकते हैं तो आप इस चीजें करते हैं ताकि आप विवरणों के प्रबंधन की जरूरत नहीं है के लिए libs हैं। async.js देखें, उदाहरण के लिए https://github.com/caolan/async – mpobrien
@mpobrien, क्या आप इस समस्या को हल करने के लिए एसिंक का उपयोग करने के बारे में विस्तार से बता सकते हैं? –
क्या आपको लगता है कि यह समाधान अभी भी 2017 में हैं या आप बेहतर कुछ भी जानते हैं? मैं इस तरह कुछ के बारे में सोच रहा था, लेकिन क्या होगा यदि 'कर्सर.एच (फ़ंक्शन (गलती, दस्तावेज़) {' में एक एसिंक फ़ंक्शन कॉल करता है, जो इस प्रकार कॉलबैक में तर्क निष्पादित करेगा और संभावित रूप से प्रत्येक के बाद डेटाबेस की आवश्यकता होगी) 'खत्म हो जाता है? और क्या होगा यदि सॉफ़्टवेयर में बाद में परिवर्तन के बाद, कॉलबैक एक और एसिंक फ़ंक्शन को कॉल करता है (मुझे आशा है कि आपको विचार मिल जाएगा)? – watery