web-dev-qa-db-fra.com

Mongo Shell exécute une requête à partir d'un fichier et affiche le résultat

Comment exécuter un fichier externe avec mongo Shell et voir le résultat dans la console?

J'ai un fichier externe, comme query.js et je voudrais l'exécuter et voir le résultat en cmd.

Disons que le contenu du fichier est: 

db.users.find()
17
Andrei

Mettez ceci dans votre fichier query.js:

function get_results (result) {
    print(tojson(result));
}

db.col.find().forEach(get_results)

et courir:

mongo db_name query.js

Voici une bonne explication pourquoi vous devriez le faire de cette façon.

31
alecxe

Le moyen le plus simple que j'ai trouvé d'exécuter des requêtes mongodb à partir d'un fichier et de voir le résultat dans la console est le suivant:

query.js:

use my_db;
db.my_collection.findOne()

Sur la ligne de commande: mongo <query.js

Cela affiche toutes les sorties sur la console, comme si vous exécutiez les requêtes individuellement dans le shell mongo.

13
Nelu

Good information here - tenait à souligner que mongo fournit une fonction printjson (), il n’est donc pas nécessaire d’écrire la vôtre à moins d’avoir besoin de plus de fonctionnalités que celles fournies par printjson ().

Exemple de fichier Mongo (test.js)

// Pretty print all documents in test.scratch
use test
db.scratch.find().forEach(printjson)

Commander

mongo < test.js

Si vous souhaitez omettre use test du fichier mongo, par exemple pour supprimer les indications d'erreur IDE des fichiers js, vous pouvez spécifier la base de données cible sur la ligne de commande: 

mongo test < test.js

Il est intéressant de noter que les exemples ci-dessus utilisent une redirection pour pousser le fichier dans le shell mongo. Cette convention d'appel vous permet d'entrer des commandes exactement comme vous le feriez dans le shell. y compris les commandes pratiques de mongo Shell comme use test.

Mongo fournit une autre convention d'appel de script: mongo test test.js qui omet l'opérateur de redirection. Cette convention d'appel exige que test.js soit un code JavaScript correct et ne puisse pas utiliser les méthodes pratiques de mongo Shell telles que use test; on utiliserait les équivalents javascript tels que getSiblingDB().

4
Steve Tarver

Cela semble avoir changé à un moment donné dans mongo cli, je devais exécuter la commande suivante pour le faire exécuter un fichier sur la base de données (avec mongo cli version 3.4.9)

mongo mongodb://192.168.1.1/YourDataBase scriptFile.js

Ensuite, remplacez 192.168.1.1 par l'ip/nom d'hôte de votre base de données, YourDataBase par le nom de la base de données et pointez sur un fichier existant.

1
nover

Une autre chose que les autres réponses n’ont pas mentionnée est que la commande use db ne fonctionnera pas dans un script externe. Le meilleur moyen est d'utiliser getSiblingDB, par exemple, si je veux utiliser une base de données appelée my_db:

db = db.getSiblingDB("my_db");

function get_results (result) {
    print(tojson(result));
}

db.col.find().forEach(get_results)

Ensuite, tout fonctionne comme prévu. Voir Ecrire des scripts pour le shell mongo .

1
laike9m