Ist es möglich, die größte Dokumentgröße in MongoDB zu finden?Größte Dokumentgröße in MongoDB finden
db.collection.stats()
zeigt durchschnittliche Größe, die nicht wirklich repräsentativ ist, weil in meinem Fall Größen erheblich abweichen können.
Ist es möglich, die größte Dokumentgröße in MongoDB zu finden?Größte Dokumentgröße in MongoDB finden
db.collection.stats()
zeigt durchschnittliche Größe, die nicht wirklich repräsentativ ist, weil in meinem Fall Größen erheblich abweichen können.
Sie können ein kleines Shell-Skript verwenden, um diesen Wert zu erhalten.
Hinweis: Im Anschluss wird eine vollständige Tabelle
var max = 0;
db.test.find().forEach(function(obj) {
var curr = Object.bsonsize(obj);
if(max < curr) {
max = curr;
}
})
print(max);
Hinweis scannen tun: dies wird versuchen, das gesamte Ergebnis im Speicher gesetzt zu speichern (von .toArray
). Vorsicht bei großen Datenmengen. Nicht in der Produktion verwenden! Abisheks Antwort hat den Vorteil, über einen Cursor anstatt über ein In-Memory-Array zu arbeiten.
Wenn Sie auch die _id möchten, versuchen Sie dies. Bei einer Sammlung namens „Anfragen“:
// Creates a sorted list, then takes the max
db.requests.find().toArray().map(function(request) { return {size:Object.bsonsize(request), _id:request._id}; }).sort(function(a, b) { return a.size-b.size; }).pop();
// { "size" : 3333, "_id" : "someUniqueIdHere" }
Nach dem Ausführen der akzeptierten Antwort, dies ist das nächste Skript, das jemand ausführen möchte! – Mrchief
Dies ist eine beste Antwort, die ich gesehen habe! – mes
Ich bekomme einen Fehler beim Ausführen dieser: Fehler: assertion src \ mongo \ util \ netz \ nachricht_port.cpp: 195 src/mongo/shell/query.js: 113 –
Wenn Sie mit einer riesigen Sammlung arbeiten, alles auf einmal in den Speicher geladen wird nicht funktionieren, da Sie mehr RAM benötigen als die Größe der gesamten Kollektion damit das funktioniert.
Stattdessen können Sie die gesamte Kollektion in Chargen mit dem folgenden Paket verarbeiten ich erstellt: https://www.npmjs.com/package/mongodb-largest-documents
Alles, was Sie tun müssen, ist die Verbindungszeichenfolge und Kollektionsnamen MongoDB bieten. Das Skript gibt die obersten X größten Dokumente aus, wenn es die gesamte Sammlung in Stapeln durchlaufen hat.
Dies ist genau das, was der eingebaute Cursor zulässt. Es streamt die Daten und speichert nicht die gesamte Sammlung im RAM. – dmo
Hi @ dmo, könnten Sie bitte einen Befehl bereitstellen, um dies über den eingebauten Cursor zu erreichen? –
collection.find() gibt einen Cursor zurück. Der Cursor ist ein Datenstrom. Also in JS können Sie so etwas tun ... https://jsfiddle.net/ro6efkdz/ – dmo
Ich weiß nicht, welche Treiber Sie verwenden, aber Sie sollten die [BSON size], um zu sehen sein können (https://github.com/mongodb/mongo-c-driver/blob /master/src/bson.h#L141) irgendwie. Machen Sie das und einen Table-Scan, um herauszufinden, was das größte Dokument ist. – vinipsmaker
Nicht leicht, es gibt keinen '$ documentSize' Operator in einer MongoDB Abfrage und' $ size' macht etwas ganz anderes. Die onkly reale Weise in den meisten clientseitigen Treibern, schließt das Javascript ein ist, den clientseitigen Helfer zu benutzen. – Sammaye