.count()
कहीं अधिक तेज है। आप कॉल करके कार्यान्वयन देख सकते हैं
// Note the missing parentheses at the end
db.collection.count
जो कर्सर की लंबाई लौटाता है। डिफ़ॉल्ट क्वेरी की (यदि count()
बिना किसी क्वेरी दस्तावेज़ के कॉल किया जाता है), जिसे बदले में _id_
. की लंबाई लौटाने के रूप में लागू किया जाता है इंडेक्स, आईआईआरसी.
हालाँकि, एक एकत्रीकरण प्रत्येक दस्तावेज़ को पढ़ता है और उसे संसाधित करता है। यह .count()
. के साथ परिमाण के समान क्रम में केवल आधा हो सकता है जब इसे केवल कुछ 100 हज़ार दस्तावेज़ों से अधिक करते हैं (अपनी RAM के अनुसार दें और लें)।
कुछ 12M प्रविष्टियों के साथ संग्रह के लिए नीचे फ़ंक्शन लागू किया गया था:
function checkSpeed(col,iterations){
// Get the collection
var collectionUnderTest = db[col];
// The collection we are writing our stats to
var stats = db[col+'STATS']
// remove old stats
stats.remove({})
// Prevent allocation in loop
var start = new Date().getTime()
var duration = new Date().getTime()
print("Counting with count()")
for (var i = 1; i <= iterations; i++){
start = new Date().getTime();
var result = collectionUnderTest.count()
duration = new Date().getTime() - start
stats.insert({"type":"count","pass":i,"duration":duration,"count":result})
}
print("Counting with aggregation")
for(var j = 1; j <= iterations; j++){
start = new Date().getTime()
var doc = collectionUnderTest.aggregate([{ $group:{_id: null, count:{ $sum: 1 } } }])
duration = new Date().getTime() - start
stats.insert({"type":"aggregation", "pass":j, "duration": duration,"count":doc.count})
}
var averages = stats.aggregate([
{$group:{_id:"$type","average":{"$avg":"$duration"}}}
])
return averages
}
और वापस आ गया:
{ "_id" : "aggregation", "average" : 43828.8 }
{ "_id" : "count", "average" : 0.6 }
इकाई मिलीसेकंड है।
एचटीएच