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 ?

564voto

theTuxRacer Punkte 13259

Sie können einen Befehl auch mit der Funktion --eval Flagge, wenn es sich nur um einen einzigen Befehl handelt.

mongo --eval "printjson(db.serverStatus())"

Bitte beachten: Wenn Sie Mongo-Operatoren verwenden, die mit einem $-Zeichen beginnen, müssen Sie das eval-Argument in einfache Anführungszeichen setzen, damit die Shell den Operator nicht als Umgebungsvariable auswertet:

mongo --eval 'db.mycollection.update({"name":"foo"},{$set:{"this":"that"}});' myDbName

Andernfalls kann es sein, dass Sie etwas wie dieses sehen:

mongo --eval "db.test.update({\"name\":\"foo\"},{$set:{\"this\":\"that\"}});"
> E QUERY    SyntaxError: Unexpected token :

374voto

Matt Punkte 42232

Fügen Sie Ihr Mongo-Skript in eine .js archivo.

Dann führen Sie mongo < yourFile.js

Ex:

demo.js //Datei mit Ihrem Skript

use sample  //db name
show collections

speichern Sie diese Datei in "c: \db -Schriften"

Gehen Sie dann in der cmd-Eingabeaufforderung zu "c: \db -Schriften"

C:\db-scripts>mongo < demo.js

Dies führt den Code in Mongo aus und zeigt die Ausgabe

C:\db-scripts>mongo < demo.js
Mongo shell version: 3.0.4
Connecting to: test
switched to db sample
users   //collection name
tasks   //collection name
bye
C:\db-scripts>

113voto

Das funktioniert bei mir unter Linux:

mongo < script.js

Für neuere Versionen von mongodb

mongosh < script.js

70voto

Theo Punkte 128508

Fügen Sie dies in eine Datei namens test.js :

db.mycollection.findOne()
db.getCollectionNames().forEach(function(collection) {
  print(collection);
});

dann führen Sie es mit mongo myDbName test.js .

46voto

thaddeusmt Punkte 15050

Es gibt eine offizielle Dokumentation Seite zu diesem Thema.

Beispiele auf dieser Seite sind:

mongo server:27017/dbname --quiet my_commands.js
mongo test --eval "printjson(db.getCollectionNames())"

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