David Young'ın bahsettiği "heredoc" sözdizimini kullanıyorum. Ancak bir sorun var:
#!/usr/bin/sh
mongo <db> <<EOF
db.<collection>.find({
fieldName: { $exists: true }
})
.forEach( printjson );
EOF
Yukarıdakiler işe yaramaz, çünkü "$ exist" ifadesi kabuk tarafından görülecek ve "exist" adlı ortam değişkeninin değeri ile değiştirilecektir. Muhtemelen mevcut değil, bu yüzden kabuk genişlemesinden sonra:
#!/usr/bin/sh
mongo <db> <<EOF
db.<collection>.find({
fieldName: { : true }
})
.forEach( printjson );
EOF
Geçebilmesi için iki seçeneğiniz var. Biri çirkin, biri gayet güzel. İlk olarak, çirkin olan: $ işaretlerinden kaç:
#!/usr/bin/sh
mongo <db> <<EOF
db.<collection>.find({
fieldName: { \$exists: true }
})
.forEach( printjson );
EOF
Ben bunu tavsiye ETMEM, çünkü kaçmayı unutmak kolaydır.
Diğer seçenek EOF'tan kaçmaktır, şöyle:
#!/usr/bin/sh
mongo <db> <<\EOF
db.<collection>.find({
fieldName: { $exists: true }
})
.forEach( printjson );
EOF
Şimdi, heredocunuza istediğiniz tüm dolar işaretlerini koyabilirsiniz ve dolar işaretleri göz ardı edilir. Aşağı tarafı: Mongo betiğinize kabuk parametreleri / değişkenleri koymanız gerekiyorsa bu işe yaramaz.
Birlikte oynayabileceğiniz bir diğer seçenek, mesleğinizle uğraşmaktır. Örneğin,
#!/bin/env mongo
<some mongo stuff>
Bu çözümle ilgili birkaç sorun var:
Yalnızca bir mongo kabuk betiğini komut satırından yürütülebilir hale getirmeye çalışıyorsanız çalışır. Normal kabuk komutlarını mongo kabuk komutlarıyla karıştıramazsınız. Ve bunu yaparak kaydettiğiniz tek şey komut satırına "mongo" yazmak zorunda kalmamaktır ... (yeterli sebep, elbette)
Tam olarak "mongo <some-js-file>" gibi işlev görür, yani "use <db>" komutunu kullanmanıza izin vermez.
İşe yarayacağını düşündüğünüz shebang'a veritabanı adı eklemeyi denedim. Ne yazık ki, sistemin shebang hattını işleme şekli, ilk boşluktan sonraki her şey env komutuna (alıntılanmış gibi) tek bir parametre olarak geçirilir ve env onu bulamaz ve çalıştırmaz.
Bunun yerine, veritabanı değişikliğini komut dosyasının içine yerleştirmelisiniz, şöyle:
#!/bin/env mongo
db = db.getSiblingDB('<db>');
<your script>
Hayattaki her şeyde olduğu gibi, "bunu yapmanın birden fazla yolu var!"
.find()
operasyonlar, aşağıdakiler gibi belgeleri yazdırmak için sonuç nesne üzerinde bir işlem çağırmanız gerekirtoArray()
yashellPrint()
. ör.,mongo userdb --eval "printjson(db.users.find().toArray())"