Kann nicht allowDiskUse:True, um die Arbeit mit pymongo
Ich in der aggregation result exceeds maximum document size (16MB)
- Fehler bei mongodb aggregation mit pymongo.
War ich in der Lage, Sie zu überwinden, bei der ersten Verwendung der limit()
option. Aber irgendwann bekam ich die
Exceeded memory limit for $group, but didn't allow external sort. Pass allowDiskUse:true to opt in." error.
Ok, ich verwende das {'allowDiskUse':True}
option. Diese option funktioniert, wenn ich es auf der Kommandozeile, aber wenn ich habe versucht, in meinem python-code
result = work1.aggregate(pipe, 'allowDiskUse:true')
Bekomme ich TypeError: aggregate() takes exactly 2 arguments (3 given)
Fehler. (das ist trotz der gegebenen definition auf http://api.mongodb.org/python/current/api/pymongo/collection.html#pymongo.collection.Collection.aggregate: Summe(pipeline, **kwargs)).
Ich habe versucht, die runCommand-oder vielmehr es ist pymongo äquivalent:
db.command('aggregate','work1',pipe, {'allowDiskUse':True})
aber jetzt bin ich wieder zu der 'aggregation Ergebnis überschreitet maximale Dokument Größe (16MB)' Fehler
Den Fall, Sie müssen wissen,
pipe = [{'$project': {'_id': 0, 'summary.trigrams': 1}}, {'$unwind': '$summary'}, {'$unwind': '$summary.trigrams'}, {'$group': {'count': {'$sum': 1}, '_id': '$summary.trigrams'}}, {'$sort': {'count': -1}}, {'$limit': 10000}]
Danke
Du musst angemeldet sein, um einen Kommentar abzugeben.
So, in Reihenfolge:
aggregate
ist eine Methode. Es dauert 2 positions-Argumente (self
, die implizit übergeben, undpipeline
) und eine beliebige Anzahl von Stichwort Argumente (die bestanden werden müssen, alsfoo=bar
-- wenn es gibt keine=
Zeichen, es ist nicht ein keyword-argument). Dies bedeutet, dass Sie benötigen, rufen Sieresult = work1.aggregate(pipe, allowDiskUse=True)
.Ihre Fehler über die maximale Größe der Dokumente eigen ist, Mongo. Mongo nie wieder kann ein Dokument (oder ein array davon), die größer als 16 MB. Ich kann Ihnen nicht sagen, warum, weil Sie uns gegeben haben, die weder Ihre Daten, noch Ihre Codes, aber es bedeutet wahrscheinlich, dass das Dokument, das Sie erstellen als Ergebnis ist zu groß. Versuchen Sie, die Verringerung der
$limit
parameter, vielleicht? Beginnen Sie mit der Einstellung 1 führen Sie einen test, dann erhöhen Sie und schauen Sie an, wie groß das Ergebnis wird, wenn Sie das tun.allowDiskUse=True
ich sehe nicht, das bson-Größe 16mb limit Problem mehr, allerdings bekam ich eine andere Größe Fehler aus der pymongo Seite:raise DocumentTooLarge("command document too large") pymongo.errors.DocumentTooLarge: command document too large
Haben Sie erlebt?