Saya ingin menjalankan mongo
perintah dalam skrip shell, misalnya dalam skrip test.sh
:
#!/bin/sh
mongo myDbName
db.mycollection.findOne()
show collections
Ketika saya menjalankan skrip ini melalui ./test.sh
, maka koneksi ke MongoDB dibuat, tetapi perintah berikut ini tidak dijalankan.
Bagaimana cara menjalankan perintah lain melalui skrip shell test.sh
?
.find()
operasi, Anda perlu memanggil operasi pada objek hasil untuk mencetak dokumen, sepertitoArray()
ataushellPrint()
. misalnya,mongo userdb --eval "printjson(db.users.find().toArray())"
mongo mydb --eval "db.users.find({a:'b'}).pretty().shellPrint()"
... simples :)mongo --eval "db.version()" --quiet
misalnya untuk menghindari pencetakan semua suara yang Anda katakanMasukkan skrip mongo Anda ke dalam
.js
file.Kemudian jalankan
mongo < yourFile.js
Ex:
demo.js // file memiliki skrip Anda
simpan file ini di "c: \ db-scripts"
Kemudian dalam cmd prompt buka "c: \ db-scripts"
Ini akan mengeksekusi kode dalam mongo dan menunjukkan output
sumber
.js
file, dan meneruskannya sebagai parameter kemongo
perintah.use dbName
danshow dbs
akan bekerja dari prompt internal shell tetapi tidak dari dalam.js
file. Ada persamaan JavaScript untuk perintah non-JavaScript, jadi ini bukan batasan, hanya sesuatu yang perlu Anda ketahui.mongo dbName -u userName -p "password with spaces" scriptToRun.js
Ini berfungsi untuk saya di Linux:
sumber
Masukkan ini ke dalam file bernama
test.js
:kemudian jalankan dengan
mongo myDbName test.js
.sumber
Ada halaman dokumentasi resmi tentang ini juga.
Contoh dari halaman itu termasuk:
sumber
Script shell di bawah ini juga bekerja dengan baik untuk saya ... pasti harus menggunakan redirect yang disebutkan Antonin pada awalnya ... yang memberi saya ide untuk menguji dokumen di sini.
sumber
echo -e "use mydb\ndb.leads.findOne()\ndb.leads.find().count()" | mongo
use another_db
. :-)db = db.getSiblingDB('otherdb');
mongo mydb <<EOF
. DllDalam pengaturan saya, saya harus menggunakan:
sumber
Saya menggunakan sintaks "heredoc", yang David Young sebutkan. Tapi ada yang menangkap:
Di atas TIDAK akan berfungsi, karena frasa "$ ada" akan terlihat oleh shell dan diganti dengan nilai variabel lingkungan bernama "ada." Yang, sepertinya, tidak ada, jadi setelah ekspansi shell, itu menjadi:
Agar dapat melewati Anda memiliki dua opsi. Satu jelek, satu cukup bagus. Pertama, yang jelek: lepas tanda $:
Saya TIDAK merekomendasikan ini, karena mudah lupa untuk melarikan diri.
Opsi lainnya adalah keluar dari EOF, seperti ini:
Sekarang, Anda dapat meletakkan semua tanda dolar yang Anda inginkan di heredoc Anda, dan tanda dolar diabaikan. Sisi bawah: Itu tidak berfungsi jika Anda perlu meletakkan parameter / variabel shell di skrip mongo Anda.
Opsi lain yang bisa Anda mainkan adalah mengacaukan shebang Anda. Sebagai contoh,
Ada beberapa masalah dengan solusi ini:
Ini hanya berfungsi jika Anda mencoba membuat skrip shell mongo dapat dieksekusi dari baris perintah. Anda tidak dapat mencampur perintah shell biasa dengan perintah shell mongo. Dan semua yang Anda hemat dengan melakukannya adalah tidak harus mengetikkan "mongo" pada baris perintah ... (cukup alasan, tentu saja)
Fungsinya persis seperti "mongo <some-js-file>" yang artinya tidak membiarkan Anda menggunakan perintah "use <db>".
Saya telah mencoba menambahkan nama database ke shebang, yang menurut Anda akan berhasil. Sayangnya, cara sistem memproses garis shebang, semuanya setelah spasi pertama dilewatkan sebagai parameter tunggal (seperti dikutip) ke perintah env, dan env gagal menemukan dan menjalankannya.
Sebagai gantinya, Anda harus menyematkan perubahan database di dalam skrip itu sendiri, seperti:
Seperti halnya apa pun dalam hidup, "ada lebih dari satu cara untuk melakukannya!"
sumber
Jika Anda mengaktifkan otentikasi:
sumber
Buat file skrip; tulis perintah:
Dalam
file.js
tuliskan mongo query Anda:sumber
Bagaimana dengan ini:
sumber
.mongorc
dimuat ( docs.mongodb.org/manual/reference/program/mongo/… )Seperti yang disarankan oleh
theTuxRacer
, Anda dapat menggunakan perintah eval , bagi mereka yang melewatkannya seperti saya, Anda juga dapat menambahkan nama db Anda jika Anda tidak mencoba untuk melakukan operasi sebelumnya pada db default.sumber
Terima kasih
printf
! Di lingkungan Linux, berikut ini cara yang lebih baik untuk hanya menjalankan satu file saja. Katakanlah Anda memiliki dua file,mongoCmds.js
dengan banyak perintah:dan kemudian file shell driver,
runMongoCmds.sh
Sebagai gantinya, miliki hanya satu file, mengandung runMongoCmds.sh
Bash
printf
jauh lebih kuat daripadaecho
dan memungkinkan\n
perintah antara memaksa mereka di beberapa baris.sumber
sumber
Dalam kasus saya, saya dapat dengan mudah digunakan
\n
sebagai pemisah untuk perintah mongo berikutnya yang ingin saya jalankan kemudian pipa merekamongo
sumber
--shell flag juga dapat digunakan untuk file javascript
sumber
mongo /path/to/jsfile/test.js
akan exectute js juga.sumber
Baru-baru ini bermigrasi dari mongodb ke Postgres. Ini adalah bagaimana saya menggunakan skrip.
Baca
scripts.js
dan hasilkan redirect keinserts.sql
.scripts.js
terlihat seperti iniinserts.sql
terlihat seperti inisumber
How to execute mongo commands through shell scripts?
Ini bukan di luar topik. Sebenarnya, saya mencapai pertanyaan ini karena judulnya. Jadi orang-orang seperti saya mendapat manfaat membaca jawaban seperti itu. Juga, saya memberikan metode yang sangat berguna dalam contoh daripada contoh mainan.Jika Anda ingin mengatasinya dengan satu baris, itu cara yang mudah.
sumber
Saya menulis berbagai opsi untuk Menjalankan Skrip Shell Mongo dari dalam skrip Bash yang lebih besar
sumber
Solusi skrip shell tunggal dengan kemampuan menyampaikan argumen mongo (
--quiet
, dbname, dll):The
-S
bendera mungkin tidak bekerja pada semua platform.sumber
Ketika menggunakan replaset, penulisan harus dilakukan pada PRIMARY, jadi saya biasanya menggunakan sintaksis seperti ini yang menghindari harus mencari tahu host mana yang merupakan master:
mongo -host myReplicaset/anyKnownReplica
sumber