Soru Mongo betiğinde dosya yazma işlemleri?


Bu, sorgu sonucunu mongo js komut dosyasından dosyaya yazmak mümkün mü? Çok aradım ama hiçbir çözüm bulamadım.

örn: -

cursor = db.users.find();

while(cursor.hasNext()) {
  cursor.next();
  // writing the cursor output to file ????<br/>
}

44
2018-01-23 11:51


Menşei


btw, eğer her zaman koleksiyonun tamamını yutuyorsanız, mongodump kullanmak daha etkilidir. Bir betik kullanarak daha esnek, baskı sonuçları önce her türlü işlem yapabilirsiniz. - milan
daha fazla mongodump - averasko


Cevaplar:


Yazdırmayı kullanabilir ve daha sonra çıkışı yönlendirebilirsiniz:

script.js:

cursor = db.users.find();
while(cursor.hasNext()){
    printjson(cursor.next());
}

sonra komut dosyasını çalıştırın ve çıktıyı bir dosyaya yönlendirin:

mongo --quiet script.js > result.txt

75
2018-01-23 13:07



Evet mümkün. Ama betiği daemon olarak çalıştırmaya çalışıyorum. Bu yüzden sadece dosya yazma işlemleri istedim. Teşekkürler. - sudesh
Komut dosyasının hangi veritabanını kullanması gerektiğini nasıl belirleyebilirim? - Nelu
@NeluMalancea sadece herhangi bir Mongo kabuk komut satırı args kullanabilirsiniz. Dolayısıyla, uzak bir ana bilgisayarda veritabanını belirtmek için, ör. mongo --host MYSERVER DATABASENAME - harika script.js> sonuç.txt - AndrewL
@NeluMalancea kullanabilirsiniz dr= new Mongo("127.0.0.1:27017").getDB("dr") sonra koleksiyonlarınızı dr. Bu, birden fazla veritabanı ile çalışmanızı sağlayacaktır; yani bir kopyadan diğerine okunabilir. - kenzie
Bu cevap, asıl amacı yerine getirmez. Bir mongo betiğinden bir dosyaya yazmanın herhangi bir yolu var mı? - comiventor


http://www.mongodb.org/display/DOCS/Scripting+the+shell paragraf "Kodlanmış ve etkileşimli / yazdırılanlar arasındaki farklar".

./mongo server.com/mydb --quiet --eval "db.users.find (). forEach (printjson);" > 1.txt


22
2017-10-11 00:17



Harika numara! Herhangi bir dosya olmadan. - ruX
Bu yaklaşım, kaçan karakterden dolayı find () 'ın içine bir sorgu koymak istiyorsanız zor olur. Bu durumda, @milan'ın cevabını ayrı bir sorgu dosyasıyla kullanmak en iyisi - AndrewL
@AndrewL Bunun yerine tek tırnak kullanabilirsiniz? Sanırım bunun kaçma ya da bir şey yapmaması gerekiyordu, değil mi? - Erhannis
Belirli alanları / özel formatları yazdırmak için şunu kullanın: ".forEach (function (d) {print (d.id);});". - Curtis Yallop
Evet, örneğin, bul filtresinde tek tırnak kullanabilirsiniz. - Curtis Yallop


While döngüsünü kullanarak forEach():

db.users.find().forEach(printjson);

12
2018-03-14 15:13



Daha da kompakt: db.users.find (). ForEach (printjson); - AndrewL


Birini kullanmak daha kolay olmaz Mongo sürücüleri Genel amaçlı bir dil için (Python, Ruby, Java, vb. gibi) ve sonuçlarınızı bir biçimde (CSV, vb.) kullanabileceğiniz bir biçimde yazabilirsiniz.

GÜNCELLEŞTİRME: Belgelere göre mongodump Bir koleksiyonu bir sorgu ile dışa aktarabilirsiniz:

$ ./mongodump --db blog --collection posts
-q '{"created_at" : { "$gte" : {"$date" : 1293868800000},
                      "$lt"  : {"$date" : 1296460800000}
                    }
    }'

Ancak, bu koleksiyon üzerinde çalışmak veya kullanmak için MongoDB'ye geri almanız gerekir. mongoexport aynı sorgu işaretini kullanarak JSON veya CSV olarak dışa aktarma-q) gibi mongodump.


3
2018-01-23 11:54



Cevabınız için teşekkürler, ama bunun mongo kabuk kullanarak çalışan sade js içinde olmasını istiyorum. - sudesh


Farklı olarak içerikle birlikte script.js dosyası oluşturmalısınız:

mongo = new Mongo("localhost");
doctor = mongo.getDB("doctor");
users = doctor.getCollection("users");
cities = users.distinct("address.city");
printjson(cities);

sonra konsolda çalıştır:

mongo --quiet script.js > result.txt

2
2018-06-08 10:36