sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB Count() vs. Aggregation

.count() er langt hurtigere. Du kan se implementeringen ved at ringe til

// Note the missing parentheses at the end
db.collection.count

som returnerer længden af ​​markøren. af standardforespørgslen (hvis count() kaldes uden forespørgselsdokument), som igen er implementeret som at returnere længden af ​​_id_ indeks, iirc.

En aggregering læser dog hvert eneste dokument og behandler det. Dette kan kun være halvvejs i samme størrelsesorden med .count() når du gør det over kun omkring 100.000 dokumenter (giv og tag i henhold til din RAM).

Nedenstående funktion blev anvendt på en samling med omkring 12 mio. poster:

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
}

Og returnerede:

{ "_id" : "aggregation", "average" : 43828.8 }
{ "_id" : "count", "average" : 0.6 }

Enheden er millisekunder.

hth




  1. Mongoose:Udfyld et befolket felt

  2. mongodb forespørgsel indlejret struktur

  3. Flyt et element fra et array til et andet inden for samme dokument MongoDB

  4. Sådan starter du mongodb fra dockerfile