MongoDB: le tri a dépassé la limite de mémoire de 104857600 octets

MongoDB: tri dépassé la limite de mémoire de 104857600 octets

Effectue une opération de tri volumineux (agrégation) dans une collection et affiche le message d'erreur suivant:

Console MongoDB

> db.bigdata.aggregate(
    {$group : {_id : "$range", total : { $sum : 1 }}},
    {$sort : {total : -1}}
);

#...
 aggregate failed
    at Error ()
    at doassert (src/mongo/shell/assert.js:11:14)
    #...
    Error: command failed: {
        "errmsg" : "exception: Sort exceeded memory limit of 104857600 bytes,
          but did not opt in to external sorting. Aborting operation. Pass allowDiskUse:true to opt in.",
        "code" : 16819,
        "ok" : 0
    }

P.S Tested with MongoDB 3.0.6

Solution

Changed in version 2.6 - Lire ceciMemory Restrictions
Dans MongoDB, le tri en mémoire a une limite de 100M, pour effectuer un grand tri, vous devez activer l'optionallowDiskUse pour écrire des données dans un fichier temporaire pour le tri.

Pour résoudre ce problème, activez l'optionallowDiskUse dans votre requête:

db.bigdata.aggregate(
[
    {$group : {_id : "$range", total : { $sum : 1 }}},
    {$sort : {total : -1}}
],
    {allowDiskUse: true}
);