So exportieren Sie JSON aus MongoDB mit Robomongo


108

Ich weiß also nicht viel darüber MongoDB. Ich habe RoboMongomit denen ich mich mit einer MongoDB verbinde. Was ich tun muss, ist Folgendes: In dieser MongoDB befindet sich eine Sammlung. Ich möchte die Daten aus dieser Sammlung exportieren, damit ich sie in einer Datei speichern kann.

Ich habe die Oberfläche verwendet, um die Daten aus der Sammlung als Text zu öffnen und habe ein Ctrl+ gemacht Aund in eine Textdatei eingefügt. Ich habe jedoch festgestellt, dass nicht alle Daten kopiert werden und dass die Textdaten viele Kommentare enthalten, die den JSON natürlich beschädigen.

Ich frage mich, ob RoboMongo eine Export As JSONEinrichtung hat, mit der ich einen sauberen Export durchführen kann.

Hinweise sind willkommen!


Sie möchten bestimmte Sammlungen oder eine vollständige Datenbank exportieren?
Ramesh Murugesan

1
Dies ist keine aktuelle Funktion von Robomongo, aber ich habe einen Funktionsvorschlag in der Github-Problemwarteschlange hinzugefügt: JSON-Export hinzufügen . Es gibt einen allgemeinen Vorschlag, Import / Export zu integrieren , aber detailliertere / praktischere Anwendungsfälle wären hilfreich. Sollte dies beispielsweise das Exportieren von JSON aus einer Sammlung, einer Suchabfrage oder einer Aggregationspipeline unterstützen? Derzeit ist es am besten, das Standard- mongoexportBefehlszeilentool zu verwenden.
Stennie

1
@Stennie - danke für deinen Kommentar. Ich denke, als Antwort auf Ihre Frage - aus Sicht der Kundenerfahrung spielt es keine Rolle. In den meisten anderen DB-Schnittstellen besteht der Ablauf darin, dass Sie eine Abfrage (mit oder ohne Kriterien) ausführen und eine Reihe von Ergebnissen erhalten. Klicken Sie mit der rechten Maustaste und sagen Sie "Ergebnisse exportieren als ...". Dies sollte also auch hier gelten. Es spielt keine Rolle, ob ich eine gesamte Sammlung oder eine Suchabfrage exportiere. Wenn das Ergebnis im Bedienfeld angezeigt werden kann, sollte es exportierbar sein.
Undefinierte Variable

1
Einfach können Sie dies tunmongoexport --uri='mongodb://someUser@mongodb0.example.com:27017/marketing' --collection=contacts --out=contacts.json
Naren

Antworten:


63

Sie können tojsonjeden Datensatz in einem MongoDB-Shell-Skript in JSON konvertieren .

Führen Sie dieses Skript in RoboMongo aus:

var cursor = db.getCollection('foo').find({}, {});
while(cursor.hasNext()) {
    print(tojson(cursor.next()))
}

Dadurch werden alle Ergebnisse als JSON-ähnliches Array gedruckt.

Das Ergebnis ist nicht wirklich JSON! Einige Typen, wie Datumsangaben und Objekt-IDs, werden als JavaScript-Funktionsaufrufe gedruckt, z ISODate("2016-03-03T12:15:49.996Z").

Möglicherweise ist es für große Ergebnismengen nicht sehr effizient, aber Sie können die Abfrage einschränken. Alternativ können Sie verwenden mongoexport.


3
Es gibt ungültigen JSON aus. Nur json-serialisierte Aufzeichnungen eins nach dem anderen
ruX

In vielen Anwendungsfällen kann tojson(db.getCollection(...).find(...)["_batch"])der gesamte aktuelle Stapel vom Server ausgegeben werden.
Yuval

@ Yuval Du meinst wörtlich ["_batch"]? Können Sie ein Beispiel geben, wie man das benutzt? Ich habe dies mit Robo 3T 1.2.1 versucht, aber es heißt nur "Skript erfolgreich ausgeführt, aber es gibt keine Ergebnisse zu zeigen".
Florian Winter

7
@FlorianWinter Das war nur aus zufälligen Befunden beim Herumspielen. Eine bessere Lösung ist tojson(db.getCollection(...).find(...).toArray()).
Yuval

@ Yuval Schön! Das ist dann die einfachste Lösung, viel besser als meine. Erwägen Sie, es als Antwort zu veröffentlichen. (Oder bearbeiten Sie meine, aber dann würde ich alle Anerkennung bekommen, die Sie verdienen, was etwas unfair wäre ...)
Florian Winter

58

Ein schneller und schmutziger Weg: Schreiben Sie einfach Ihre Anfrage als db.getCollection('collection').find({}).toArray()und klicken Sie mit der rechten Maustaste Copy JSON. Fügen Sie die Daten in den Editor Ihrer Wahl ein.

Geben Sie hier die Bildbeschreibung ein


4
Ordentlich! Überhaupt nicht schmutzig, wenn man bedenkt, dass in robo3t keine Exportfunktionen vorhanden sind. Viel einfacher für kleine Datenmengen im Vergleich zu anderen Lösungsvorschlägen.
Ilya Luzyanin

30

Robomongos Shell-Funktionalität wird das Problem lösen. In meinem Fall brauchte ich einige Spalten als CSV-Format.

var cursor = db.getCollection('Member_details').find({Category: 'CUST'},{CustomerId :1,Name :1,_id:0})

while (cursor.hasNext()) {
    var record = cursor.next();   
    print(record.CustomerID + "," + record.Name)
}

Output : -------

334, Harison
433, Rechard
453, Michel
533, Pal

1
Ist es möglich, die Ausgabe dieses Skripts lokal in eine CSV-Datei innerhalb der Robomongo-Shell zu schreiben?
xxxvincxxx

Dies gibt mir "Skript erfolgreich ausgeführt, aber es gibt keine Ergebnisse zu zeigen"
Shanika Ediriweera

Fehler: Zeile 10: Ungültige linke Seite in Zuordnung
Eugen Sunic

19

Es gibt einige MongoDB-GUIs, von denen einige eine integrierte Unterstützung für den Datenexport bieten. Eine umfassende Liste der MongoDB-GUIs finden Sie unter http://mongodb-tools.com

Sie haben nach dem Exportieren der Ergebnisse Ihrer Abfrage und nicht nach dem Exportieren ganzer Sammlungen gefragt. Probieren Sie die 3T MongoChef MongoDB-Benutzeroberfläche aus. Dieses Tool unterstützt Ihren speziellen Anwendungsfall.


Studio 3T hat die Arbeit einfacher gemacht als erwartet! : +1:
vinyll

15

Sie sagen "In Datei exportieren" wie in einer Tabelle? wie zu einem .csv?

IMO ist dies der EINFACHSTE Weg, dies in Robo 3T (ehemals Robomongo) zu tun:

  1. Oben rechts in der Robo 3T-Benutzeroberfläche befindet sich die Schaltfläche "Ergebnisse im Textmodus anzeigen". Klicken Sie darauf und kopieren Sie alles

  2. Fügen Sie alles in diese Website ein: https://json-csv.com/

  3. Klicken Sie auf den Download-Button und Sie haben es jetzt in einer Tabelle.

Ich hoffe, das hilft jemandem, denn ich wünschte, Robo 3T hätte Exportmöglichkeiten


Sehr einfach, danke
Tính Ngô Quang

11

Führen Sie diesen Befehl nicht in der Shell aus, sondern geben Sie dieses Skript an einer Eingabeaufforderung ein, wobei Ihr Datenbankname, Ihr Sammlungsname und Ihr Dateiname die Platzhalter ersetzen.

mongoexport --db (Database name) --collection (Collection Name) --out (File name).json

Für mich geht das.



5

Als Erweiterung von Anishs Antwort wollte ich etwas, das ich auf jede Abfrage anwenden kann, um automatisch alle Felder auszugeben, anstatt sie in der print-Anweisung definieren zu müssen. Es kann wahrscheinlich vereinfacht werden, aber das war etwas schnelles und schmutziges, das großartig funktioniert:

var cursor = db.getCollection('foo').find({}, {bar: 1, baz: 1, created_at: 1, updated_at: 1}).sort({created_at: -1, updated_at: -1});

while (cursor.hasNext()) {
    var record = cursor.next();
    var output = "";
    for (var i in record) {
      output += record[i] + ",";
    };
    output = output.substring(0, output.length - 1);
    print(output);
}

4

Wenn Sie mongoimport verwenden möchten , möchten Sie folgendermaßen exportieren:

db.getCollection('tables')
  .find({_id: 'q3hrnnoKu2mnCL7kE'})
  .forEach(function(x){printjsononeline(x)});

2

Verwenden eines Robomongo-Shell-Skripts:

//on the same db
var cursor = db.collectionname.find();

while (cursor.hasNext()) {
    var record = cursor.next();   
    db.new_collectionname.save(record);
}

Verwenden des Export- und Importbefehls von mongodb

Sie können den --jsonArrayParameter / das Flag zu Ihrem hinzufügenmongoexport Befehl Dadurch wird das Ergebnis als einzelnes JSON-Array exportiert.

Geben Sie --jsonArraydann beim Importieren einfach das Flag erneut an.

Oder entfernen Sie die beginnenden und endenden Array-Klammern [] in der Datei. Anschließend wird Ihre geänderte und exportierte Datei mit dem mongoimportBefehl ohne --jsonArrayFlag importiert .

Weitere Informationen zum Export finden Sie hier: https://docs.mongodb.org/manual/reference/program/mongoexport/#cmdoption--jsonArray

Importieren Sie hier: https://docs.mongodb.org/manual/reference/program/mongoimport/#cmdoption--jsonArray


1

Ich hatte das gleiche Problem und das Ausführen eines Skripts in Robomongo (Robo 3T 1.1.1) erlaubt auch nicht das Kopieren von Werten, und es gab auch keine Exportoption. Der beste Weg, dies zu erreichen, ist die Verwendung von Mongoexport. Wenn Mongodb auf Ihrem lokalen Server installiert ist, können Sie Mongoexport verwenden, um eine Verbindung zur Datenbank auf einem beliebigen Server herzustellen und Daten zu extrahieren

Führen Sie den folgenden Mongoexport in Ihrer Befehlszeile aus, um eine Verbindung zu Daten auf dem Remote-Server und zur CSV-Ausgabedatei herzustellen

mongoexport --host HOSTNAME --port PORT --username USERNAME --password "PASSWORD" --collection COLLECTION_NAME --db DATABASE_NAME --out OUTPUTFILE.csv --type=csv --fieldFile fields.txt

fieldFile: hilft beim Extrahieren der gewünschten Spalten. Beispiel: Der Inhalt von fields.txt kann einfach sein:

Benutzeridentifikation

um nur Werte der Spalte 'userId' zu extrahieren

Daten auf Remote-Server, JSON-Ausgabedatei:

mongoexport --host HOST_NAME --port PORT --username USERNAME --password "PASSWORD" --collection COLECTION_NAME --db DATABASE_NAME --out OUTPUT.json

Dadurch werden alle Felder in die JSON-Datei extrahiert

Daten auf localhost (mongodb sollte auf localhost ausgeführt werden)

mongoexport --db DATABASE_NAME --collection COLLECTION --out OUTPUT.json

Referenz: https://docs.mongodb.com/manual/reference/program/mongoexport/#use


1

Lösung:

mongoexport --db test --collection traffic --out traffic.json<br><br>

Geben Sie hier die Bildbeschreibung ein

Wobei:
Datenbank ->
Name der Mock-Server- Sammlung -> Name der
Ausgabedatei von api_defs -> childChoreRequest.json


1

Eine Erweiterung der Antwort von Florian Winter für Personen, die eine ausführbare Abfrage generieren möchten.

dropund insertManyAbfrage mit cursor:

{
    // collection name
    var collection_name = 'foo';

    // query
    var cursor = db.getCollection(collection_name).find({});

    // drop collection and insert script
    print('db.' + collection_name + '.drop();');
    print('db.' + collection_name + '.insertMany([');

    // print documents
    while(cursor.hasNext()) {
        print(tojson(cursor.next()));

        if (cursor.hasNext()) // add trailing "," if not last item
            print(',');
    }

    // end script
    print(']);');
}

Die Ausgabe lautet wie folgt:

db.foo.drop();
db.foo.insertMany([
{
    "_id" : ObjectId("abc"),
    "name" : "foo"
}
,
{
    "_id" : ObjectId("xyz"),
    "name" : "bar"
}
]);

0
  1. mach deine Suche
  2. Die Ansicht der Drucktasten führt zum JSON-Modus
  3. Kopieren Sie das Ergebnis in ein Wort
  4. Drucken Sie das Ergebnis aus dem Wort

Wenn ich Daten in meinem Dokument habe, werden ISODate-Elemente zurückgegeben, die kein gültiges JSON-Format haben.
Constantino Cronemberger

1
Warum sollten Sie ein Word-Dokument zum Speichern eines Datenbankexports verwenden? Und warum in aller Welt sollte jemand einen Datenbankexport drucken wollen?
Maesk

@maesk 🤣🤣🤣🤣
Charlie Schliesser
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.