यहां toArray()
के बीच तुलना है और कर्सर find()
. के बाद Node.js MongoDB ड्राइवर में। सामान्य कोड:
var MongoClient = require('mongodb').MongoClient,
assert = require('assert');
MongoClient.connect('mongodb://localhost:27017/crunchbase', function (err, db) {
assert.equal(err, null);
console.log('Successfully connected to MongoDB.');
const query = { category_code: "biotech" };
// toArray() vs. cursor code goes here
});
यह रहा toArray()
कोड जो उपरोक्त अनुभाग में जाता है।
db.collection('companies').find(query).toArray(function (err, docs) {
assert.equal(err, null);
assert.notEqual(docs.length, 0);
docs.forEach(doc => {
console.log(`${doc.name} is a ${doc.category_code} company.`);
});
db.close();
});
दस्तावेज़ीकरण के अनुसार,
<ब्लॉकक्वॉट>कॉलर यह सुनिश्चित करने के लिए ज़िम्मेदार है कि परिणामों को संग्रहीत करने के लिए पर्याप्त मेमोरी है।
cursor.forEach()
. का उपयोग करते हुए यहां कर्सर-आधारित दृष्टिकोण दिया गया है विधि:
const cursor = db.collection('companies').find(query);
cursor.forEach(
function (doc) {
console.log(`${doc.name} is a ${doc.category_code} company.`);
},
function (err) {
assert.equal(err, null);
return db.close();
}
);
});
forEach()
. के साथ दृष्टिकोण, स्मृति में सभी डेटा लाने के बजाय, हम डेटा को हमारे एप्लिकेशन में स्ट्रीम कर रहे हैं। find()
तुरंत एक कर्सर बनाता है क्योंकि यह वास्तव में डेटाबेस के लिए अनुरोध नहीं करता है जब तक कि हम इसके द्वारा प्रदान किए जाने वाले कुछ दस्तावेज़ों का उपयोग करने का प्रयास नहीं करते हैं। cursor
का बिंदु हमारी क्वेरी का वर्णन करना है। दूसरा पैरामीटर cursor.forEach
दिखाता है कि त्रुटि होने पर क्या करना चाहिए।
उपरोक्त कोड के प्रारंभिक संस्करण में, यह toArray()
था जिसने डेटाबेस कॉल को मजबूर किया। इसका मतलब था कि हमें सभी की आवश्यकता थी दस्तावेज़ और चाहते थे कि वे एक array
. में हों .
ध्यान दें कि MongoDB
बैचों में डेटा लौटाता है। नीचे दी गई छवि कर्सर से (आवेदन से) MongoDB
. के अनुरोधों को दिखाती है :
forEach
toArray
. से बेहतर स्केल क्योंकि हम दस्तावेज़ों को आते ही संसाधित कर सकते हैं जब तक हम अंत तक नहीं पहुंच जाते। इसकी तुलना toArray
. से करें - जहां हम सभी की प्रतीक्षा करते हैं पुनर्प्राप्त किए जाने वाले दस्तावेज़ और संपूर्ण सरणी बनाई गई है। इसका मतलब है कि हमें इस तथ्य से कोई फायदा नहीं हो रहा है कि ड्राइवर और डेटाबेस सिस्टम आपके आवेदन के परिणामों को बैचने के लिए एक साथ काम कर रहे हैं। बैचिंग मेमोरी ओवरहेड और निष्पादन समय के संदर्भ में दक्षता प्रदान करने के लिए है। यदि आप कर सकते हैं तो अपने आवेदन में इसका लाभ उठाएं।