Comment exporter JSON depuis MongoDB à l'aide de Robomongo

108

Donc je ne sais pas grand-chose MongoDB. J'ai à l' RoboMongoaide duquel je me connecte à un MongoDB. Ce que je dois faire, c'est ceci - il y a une collection dans ce MongoDB. Je souhaite exporter les données de cette collection afin de pouvoir les enregistrer dans un fichier.

J'ai utilisé l'interface pour ouvrir les données de la collection sous forme de texte et j'ai fait un Ctrl+ Aet collé dans un fichier texte. Cependant, j'ai trouvé que toutes les données ne sont pas copiées et qu'il y avait de nombreux commentaires dans les données texte qui cassent naturellement le JSON.

Je me demande si RoboMongo a une Export As JSONinstallation pour que je puisse faire une exportation propre.

Tous les pointeurs sont appréciés!

Variable indéfinie
la source
Vous souhaitez exporter des collections particulières ou une base de données complète?
Ramesh Murugesan le
1
Ce n'est pas une fonctionnalité actuelle de Robomongo, mais j'ai ajouté une suggestion de fonctionnalité dans la file d'attente des problèmes github: Ajouter une exportation JSON . Il y a une suggestion générale que l' importation / exportation devrait être intégrée , mais des cas d'utilisation plus détaillés / pratiques seraient utiles. Par exemple, cela devrait-il prendre en charge l'exportation de JSON à partir d'une collection, d'une requête de recherche, d'un pipeline d'agrégation? Actuellement, votre meilleure option est d'utiliser l' mongoexportoutil de ligne de commande standard .
Stennie
1
@Stennie - merci pour votre commentaire. Je suppose qu'en réponse à votre question - du point de vue de l'expérience client, cela n'a pas vraiment d'importance. Dans la plupart des autres interfaces de base de données, le flux est que vous exécutez une requête (avec ou sans critère), obtenez un ensemble de résultats. Cliquez avec le bouton droit de la souris et dites "exporter les résultats sous ...". La même chose devrait donc s'appliquer ici. Peu importe si j'exporte une collection entière ou une requête de recherche. Si le résultat peut être affiché dans le panneau, il doit être exportable.
Variable non
1
Vous pouvez simplement le fairemongoexport --uri='mongodb://[email protected]:27017/marketing' --collection=contacts --out=contacts.json
Naren

Réponses:

64

Vous pouvez utiliser tojsonpour convertir chaque enregistrement en JSON dans un script shell MongoDB .

Exécutez ce script dans RoboMongo:

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

Cela imprime tous les résultats sous forme de tableau de type JSON.

Le résultat n'est pas vraiment JSON! Certains types, tels que les dates et les ID d'objet, sont imprimés sous forme d'appels de fonction JavaScript, par exemple,ISODate("2016-03-03T12:15:49.996Z") .

Ce n'est peut-être pas très efficace pour les grands ensembles de résultats, mais vous pouvez limiter la requête. Vous pouvez également utiliser mongoexport.

Florian hiver
la source
3
Il génère des json non valides. Just json-serialized records one by one
ruX
Pour de nombreux cas d'utilisation, on peut utiliser tojson(db.getCollection(...).find(...)["_batch"])pour sortir l'intégralité du lot actuel obtenu à partir du serveur.
Yuval
@Yuval Vous voulez dire littéralement ["_batch"]? Pouvez-vous donner un exemple comment l'utiliser? J'ai essayé ceci avec Robo 3T 1.2.1, mais il dit seulement "Script exécuté avec succès, mais il n'y a aucun résultat à afficher".
Florian Winter
7
@FlorianWinter C'était juste à partir de découvertes aléatoires de bidouilles. Une meilleure solution est tojson(db.getCollection(...).find(...).toArray()).
Yuval
@Yuval Nice! C'est alors la solution la plus simple, bien meilleure que la mienne. Pensez à l'afficher comme réponse. (Ou éditez le mien, mais j'aurais alors tout le crédit que vous méritez, ce qui serait un peu injuste ...)
Florian Winter
59

Une manière rapide et sale: écrivez simplement votre requête au fur db.getCollection('collection').find({}).toArray()et à mesure et faites un clic droit Copy JSON. Collez les données dans l'éditeur de votre choix.

entrez la description de l'image ici

öbl
la source
4
Soigné! Pas sale du tout compte tenu du manque de fonctionnalité d'exportation dans robo3t. Beaucoup plus facile pour les petits ensembles de données par rapport aux autres solutions suggérées.
Ilya Luzyanin
30

La fonctionnalité shell de Robomongo résoudra le problème. Dans mon cas, j'avais besoin de quelques colonnes au format CSV.

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
Anish Abraham
la source
1
Est-il possible d'écrire la sortie de ce script dans un csv localement dans le shell Robomongo?
xxxvincxxx
Cela me donne "Script exécuté avec succès, mais il n'y a aucun résultat à afficher"
Shanika Ediriweera
Erreur: ligne 10: côté gauche non valide dans l'affectation
Eugen Sunic
19

Il existe quelques interfaces graphiques MongoDB, dont certaines ont un support intégré pour l'exportation de données. Vous trouverez une liste complète des interfaces graphiques MongoDB sur http://mongodb-tools.com

Vous avez posé une question sur l'exportation des résultats de votre requête et non sur l'exportation de collections entières. Essayez 3T MongoChef MongoDB GUI , cet outil prend en charge votre cas d'utilisation spécifique.

Tomek
la source
Studio 3T a fait le travail plus facilement que prévu! : +1:
vinyll
16

vous dites "exporter vers un fichier" comme dans une feuille de calcul? comme à un .csv?

IMO, c'est le moyen le plus simple de le faire dans Robo 3T (anciennement robomongo):

  1. En haut à droite de l'interface graphique du Robo 3T, il y a un bouton "Afficher les résultats en mode texte", cliquez dessus et copiez tout

  2. collez tout sur ce site Web: https://json-csv.com/

  3. cliquez sur le bouton de téléchargement et maintenant vous l'avez dans une feuille de calcul.

J'espère que cela aide quelqu'un, car je souhaite que Robo 3T ait des capacités d'exportation

russe
la source
11

N'exécutez pas cette commande sur le shell, entrez ce script à l'invite de commande avec le nom de votre base de données, le nom de la collection et le nom de fichier, tous remplaçant les espaces réservés.

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

Ça marche pour moi.

Yogesh Nikam Patil
la source
5

En développant la réponse d'Anish, je voulais quelque chose que je puisse appliquer à n'importe quelle requête pour afficher automatiquement tous les champs au lieu de devoir les définir dans l'instruction d'impression. Cela peut probablement être simplifié, mais c'était quelque chose de rapide et de sale qui fonctionne très bien:

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);
}
Mark Shust à M.academy
la source
4

Si vous souhaitez utiliser mongoimport , vous souhaiterez exporter de cette façon:

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

Utilisation d'un script shell robomongo:

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

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

Utilisation de la commande d'exportation et d'importation de mongodb

Vous pouvez ajouter le --jsonArrayparamètre / indicateur à votremongoexport commande, cela exporte le résultat sous forme de tableau json unique.

Ensuite, spécifiez simplement le --jsonArray nouveau indicateur lors de l'importation.

Ou supprimez les crochets de tableau de début et de fin [] dans le fichier, puis votre fichier modifié et exporté sera importé avec la mongoimportcommande sans le--jsonArray drapeau.

Plus d'informations sur l'exportation ici: https://docs.mongodb.org/manual/reference/program/mongoexport/#cmdoption--jsonArray

Importez ici: https://docs.mongodb.org/manual/reference/program/mongoimport/#cmdoption--jsonArray

Héraut Smit
la source
1

J'ai eu ce même problème, et l'exécution de script dans robomongo (Robo 3T 1.1.1) ne permet pas non plus de copier des valeurs et il n'y avait pas non plus d'option d'exportation. La meilleure façon d'y parvenir est d'utiliser mongoexport, si mongodb est installé sur votre site local, vous pouvez utiliser mongoexport pour vous connecter à la base de données sur n'importe quel serveur et extraire des données

Pour vous connecter aux données sur un serveur distant et au fichier de sortie csv, exécutez le mongoexport suivant dans votre ligne de commande

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

fieldFile: permet d'extraire les colonnes souhaitées, ex: le contenu de fields.txt peut être simplement:

identifiant d'utilisateur

pour extraire uniquement les valeurs de la colonne 'userId'

Données sur le serveur distant, fichier de sortie json:

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

ceci extrait tous les champs dans le fichier json

données sur localhost (mongodb doit être exécuté sur localhost)

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

Référence: https://docs.mongodb.com/manual/reference/program/mongoexport/#use

Venkata Buddhiraju
la source
1

Solution:

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

entrez la description de l'image ici

Où:
base de données ->
nom de la collection du serveur fictif
-> nom du fichier de sortie api_defs -> childChoreRequest.json

amoljdv06
la source
1

Une extension de la réponse Florian Winter pour les personnes qui cherchent à générer une requête prête à exécuter.

dropet insertManyinterrogez en utilisant 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(']);');
}

Sa sortie sera comme:

db.foo.drop();
db.foo.insertMany([
{
    "_id" : ObjectId("abc"),
    "name" : "foo"
}
,
{
    "_id" : ObjectId("xyz"),
    "name" : "bar"
}
]);
Shaharyar
la source
0
  1. faites votre recherche
  2. affichage du bouton poussoir résultats en mode JSON
  3. copier le résultat dans le mot
  4. imprimer le résultat du mot
osama beshara
la source
Lorsque j'ai des dates dans mon document, il renvoie des éléments ISODate qui ne sont pas au format json valide.
Constantino Cronemberger le
1
Pourquoi utiliser un document Word pour stocker une exportation de base de données? Et pourquoi diable quelqu'un voudrait-il imprimer une exportation de base de données?
maesk
@maesk 🤣🤣🤣🤣
Charlie Schliesser