जब डेटाबेस का उपयोग करके मारा जाता है तो मुझे समझने में परेशानी होती है node-mongodb-native
। उस पर कोई संदर्भ नहीं मिल सका। जैसा कि सब कुछ कॉलबैक आधारित है, इसने मुझे यह एहसास दिलाया कि हर एक कॉल डेटाबेस को हिट करता है ... उदाहरण के लिए, क्या वे दो स्निपेट हैं जो डेटाबेस के हिट होने के मामले में अलग-अलग हैं
// ---- 1
db.collection("bla", function(err, coll) {
coll.findOne({"blo": "bli"}, function(err, doc) {
coll.count(function(err, count) {
console.log(doc, count)
})
})
})
// ---- 2
db.collection("bla", function(err, coll) {
coll.findOne({"blo": "bli"}, function(err, doc) {
db.collection("bla", function(err, coll) {
coll.count(function(err, count) {
console.log(doc, count)
})
})
})
})
मैं मूल रूप से सोच रहा था कि क्या मैं कैश कर सकता हूंसंग्रह और कर्सर के उदाहरण। उदाहरण के लिए, सर्वर प्रारंभ में मुझे केवल एक बार संग्रह की आवश्यकता क्यों नहीं है, और समान उदाहरणों का अनिश्चित काल के लिए पुनः उपयोग करें?
मैं वास्तव में यह समझना चाहता हूं कि पूरी चीज कैसे काम करती है, इसलिए मैं वास्तव में विवरण में सामान की व्याख्या करने वाले एक अच्छे लिंक की सराहना करता हूं।
उत्तर:
उत्तर № 1 के लिए 1नोड कोड के लिए स्रोत कोड को देख रहा है collection
ऐसा लगता है कि यह संग्रह के निर्माण पर MongoDB को पिंग नहीं करेगा जब तक कि आपके पास सख्त मोड न हो: https://github.com/mongodb/node-mongodb-native/blob/master/Readme.md#strict-mode
स्रोत कोड मैंने देखा ( https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/db.js#L446 ) इस विचार को पुष्ट किया कि यदि सख्त नहीं था तो यह सिर्फ एक नया नोड बनाने की कोशिश करेगा। संग्रह ऑब्जेक्ट को हटाकर कॉलबैक चलाएगा।
तथापि findOne
तथा count
नोड.जेएस की "आलसी" क्वेरी को तोड़ देगा और परिणाम प्राप्त करने के लिए डेटाबेस को क्वेरी करने के लिए बाध्य करेगा।
ध्यान दें count
संग्रह में सभी वस्तुओं के "t" को "सही" लागू करने के लिए संग्रह में जीता जा रहा है। इसके बजाय यह इस संग्रह से जानकारी एकत्र करेगा।
तो पहले स्निपेट के लिए आपको दो प्रश्नों को चलाना चाहिए। के लिए एक findOne
और एक के लिए count
और दूसरे स्निपेट के लिए दो के बाद से संग्रह बनाने के बाद से findOne
MongoDB के लिए क्वेरी लागू नहीं करनी चाहिए।
उत्तर № 2 के लिए 1
कुछ गुगली करने के बाद, मैंने पाया यह लिंक के लिए सर्वोत्तम प्रथाओं के बारे में node-mongodb-native
। इसका उत्तर क्रिश्चियन Kvalheim द्वारा दिया गया है जो पुस्तकालय का अनुचर प्रतीत होता है। वह कहता है :
"यदि आप चाहें तो संग्रह वस्तुओं को सुरक्षित रूप से संग्रहीत कर सकते हैं और उनका पुनः उपयोग कर सकते हैं"
तो भले ही कॉल करने के लिए collection
यदि यह बनाया गया है तो डेटाबेस को हिट कर सकता है strict
मोड, वास्तविक क्लाइंट-साइड संग्रह उदाहरण का पुन: उपयोग किया जा सकता है।