MongoDB: Sortierung überschritten Speichergrenze von 104857600 Byte

MongoDB: Die Sortierung hat das Speicherlimit von 104857600 Byte überschritten

Führt eine große Sortieroperation (Aggregation) in einer Auflistung aus und zeigt die folgende Fehlermeldung an:

MongoDB-Konsole

> 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

Lösung

Changed in version 2.6 - Lesen Sie dieseMemory Restrictions
In MongoDB ist die In-Memory-Sortierung auf 100 MB begrenzt. Um eine große Sortierung durchzuführen, müssen Sie die OptionallowDiskUse aktivieren, um Daten zu schreiben zu einer temporären Datei zum Sortieren.

Um dies zu beheben, aktivieren Sie die OptionallowDiskUse in Ihrer Abfrage:

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