我想在shell脚本中执行mongo命令,例如在脚本test.sh中:
#!/bin/sh
mongo myDbName
db.mycollection.findOne()
show collections
当我通过./test.sh执行这个脚本时,会建立到MongoDB的连接,但不会执行以下命令。
如何通过shell脚本test.sh执行其他命令?
我想在shell脚本中执行mongo命令,例如在脚本test.sh中:
#!/bin/sh
mongo myDbName
db.mycollection.findOne()
show collections
当我通过./test.sh执行这个脚本时,会建立到MongoDB的连接,但不会执行以下命令。
如何通过shell脚本test.sh执行其他命令?
当前回答
这适用于我在Linux下:
mongo < script.js
mongodb的更新版本
mongosh < script.js
其他回答
mongo db_name --eval "db.user_info.find().forEach(function(o) {print(o._id);})"
在我的情况下,我可以方便地使用\n作为分隔符的下一个mongo命令,我想要执行,然后管道他们到mongo
echo $'use your_db\ndb.yourCollection.find()' | mongo
更新版本的mongodb
echo $'use your_db\ndb.yourCollection.find()' | mongosh
最近从mongodb迁移到Postgres。这是我使用脚本的方式。
mongo < scripts.js > inserts.sql
读取scripts.js,输出重定向到inserts.sql。
js看起来像这样
use myDb;
var string = "INSERT INTO table(a, b) VALUES";
db.getCollection('collectionName').find({}).forEach(function (object) {
string += "('" + String(object.description) + "','" + object.name + "'),";
});
print(string.substring(0, string.length - 1), ";");
插入。SQL看起来像这样
INSERT INTO table(a, b) VALUES('abc', 'Alice'), ('def', 'Bob'), ('ghi', 'Claire');
将mongo脚本放到.js文件中。
然后执行mongo < yourFile.js
Ex:
Demo.js //file有你的脚本
use sample //db name
show collections
将此文件保存在“c:\db-scripts”中
然后在cmd提示符中转到"c:\db-scripts"
C:\db-scripts>mongo < demo.js
这将在mongo中执行代码并显示输出
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>
单shell脚本解决方案,能够传递mongo参数(——quiet, dbname,等):
#!/usr/bin/env -S mongo --quiet localhost:27017/test
cur = db.myCollection.find({});
while(cur.hasNext()) {
printjson(cur.next());
}
-S标志可能不适用于所有平台。