489 Stimmen

Wie führt man Mongo-Befehle über Shell-Skripte aus?

Ich möchte Folgendes ausführen mongo Befehle in Shell-Skripten, z. B. in einem Skript test.sh :

#!/bin/sh
mongo myDbName
db.mycollection.findOne()
show collections

Wenn ich dieses Skript über ./test.sh wird die Verbindung zu MongoDB hergestellt, aber die folgenden Befehle werden nicht ausgeführt.

Wie man andere Befehle über ein Shell-Skript ausführt test.sh ?

17voto

GSK Punkte 523

Erstellen Sie eine Skriptdatei; schreiben Sie Befehle:

#!/bin/sh
mongo < file.js

Für neuere Versionen mongosh < file.js

En file.js schreiben Sie Ihre Mongo-Abfrage:

db.collection.find({"myValue":null}).count();

16voto

tgoneil Punkte 1402

Dankeschön printf ! In einer Linux-Umgebung gibt es einen besseren Weg, um nur eine Datei die Show laufen zu lassen. Nehmen wir an, Sie haben zwei Dateien, mongoCmds.js mit mehreren Befehlen:

use someDb
db.someColl.find()

und dann die Treiber-Shell-Datei, runMongoCmds.sh

mongo < mongoCmds.js

Neuere Version von mongodb

mongosh < mongoCmds.js

Stattdessen gibt es nur eine Datei, runMongoCmds.sh, die Folgendes enthält

printf "use someDb\ndb.someColl.find()" | mongo

Bash's printf ist viel robuster als echo und ermöglicht die \n zwischen den Befehlen, um sie auf mehrere Zeilen zu verteilen.

15voto

Matt Clark Punkte 26471

Wie vorgeschlagen von theTuxRacer können Sie die eval Befehl, für diejenigen, die es vermissen, wie ich es war, können Sie auch in Ihrem db Namen hinzufügen, wenn Sie nicht versuchen, Preform Betrieb auf der Standard-DB sind.

mongo <dbname> --eval "printjson(db.something.find())"

Neuere Version von mongodb

mongosh <dbname> --eval "printjson(db.something.find())"

15voto

Ardhi Punkte 2529

In meinem Fall kann ich bequem Folgendes verwenden \n als Trennzeichen für den nächsten Mongo-Befehl, den ich ausführen möchte, und leiten sie dann an mongo

echo $'use your_db\ndb.yourCollection.find()' | mongo

Neuere Version von mongodb

echo $'use your_db\ndb.yourCollection.find()' | mongosh

10voto

Erdem ÖZDEMİR Punkte 755
mongo <<EOF
use <db_name>
db.getCollection("<collection_name>").find({})
EOF

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X