क्वेरी प्रदर्शन पर एक अजीब सा ... मुझे एक क्वेरी चलाने की ज़रूरत है जो दस्तावेजों की कुल गिनती करती है, और एक परिणाम सेट भी लौटा सकती है जो सीमित और ऑफसेट हो सकता है।
तो, मेरे पास कुल 57 दस्तावेज हैं, और उपयोगकर्ता 10 दस्तावेजों को 20 से ऑफसेट करना चाहता है।
मैं ऐसा करने के 2 तरीकों के बारे में सोच सकता हूं, पहले सभी 57 दस्तावेजों के लिए क्वेरी है (एक सरणी के रूप में लौटा), फिर array.slice का उपयोग करके वे इच्छित दस्तावेज़ लौटाएं। दूसरा विकल्प 2 प्रश्नों को चलाने के लिए है, पहला है जो मोंगो की मूल 'गणना' पद्धति का उपयोग करता है, फिर एक दूसरी क्वेरी को मोंगो की मूल $ सीमा और $ स्किप एग्रीगेटर्स का उपयोग करके चलाएं।
जो आपको लगता है कि बेहतर होगा? यह सब एक क्वेरी में कर रहे हैं, या दो अलग-अलग चल रहे हैं?
संपादित करें:
// 1 query
var limit = 10;
var offset = 20;
Animals.find({}, function (err, animals) {
if (err) {
return next(err);
}
res.send({count: animals.length, animals: animals.slice(offset, limit + offset)});
});
// 2 queries
Animals.find({}, {limit:10, skip:20} function (err, animals) {
if (err) {
return next(err);
}
Animals.count({}, function (err, count) {
if (err) {
return next(err);
}
res.send({count: count, animals: animals});
});
});
count()
PHP में डिफ़ॉल्ट फ़ंक्शन तब तकlimit
याskip
खाते में नहीं आता है जब तक कि इसे केवल एक क्वेरी की सीमा और स्किप करने के लिए नहीं कहा जाता है और फिर गिनती प्राप्त करना संभवत: यहां सबसे अधिक प्रदर्शन योग्य समाधान देना चाहिए। हालाँकि, आप कैसे करेंगे कि 57 दस्तावेज़ हैं यदि आप दो प्रश्नों को गिनने के लिए नहीं करते हैं कि वर्तमान में क्या है? क्या आपके पास एक स्थिर संख्या है जो कभी नहीं बदलती है? यदि नहीं तो आपको स्किप और लिमिट दोनों की आवश्यकता होगी।