2012-01-23 11 views
41

Czy można zapisać wynik zapytania do pliku ze skryptu mongo js. Wiele szukałem, ale nie znalazłem żadnego rozwiązania.Operacje zapisu pliku w skrypcie mongo?

ex: -

cursor = db.users.find(); 

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

btw, jeśli zawsze powtarzacie całą kolekcję, niż wydajniej jest używać mongodump. używanie skryptu jest bardziej elastyczne, możesz wykonać wszystkie rodzaje przetwarzania przed wydrukowaniem wyników. – milan

+0

więcej informacji na [mongodump] (http://stackoverflow.com/questions/8991292/dump-mongo-collection-into-json-format) – averasko

Odpowiedz

70

Można użyć wydrukować i następnie przekierować dane wyjściowe:

script.js:

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

następnie uruchomić skrypt i przekierować dane wyjściowe do pliku:

mongo --quiet script.js > result.txt 
+1

tak, jest to możliwe. Ale próbuję uruchomić skrypt jako demon. Więc tylko prosiłem o operacje zapisu plików. dzięki. – sudesh

+0

"wynik procesu daemon może być przekierowany do pliku. możesz napisać wokół niego skrypt powłoki, aby wywołać mongo na demo.js i przekierować do pliku. – milan

+1

Jak określić, z której bazy danych powinien korzystać skrypt? – Nelu

3

nie byłoby prostsze w użyciu jednej z Mongo drivers dla języka ogólnego przeznaczenia (takich jak Python, Ruby, Java, etc) i zapisywać wyniki do pliku, który sposób, w formacie, z którego możesz korzystać (np. CSV itp.)?

UPDATE: Według dokumentacji mongodump można wyeksportować kolekcji z zapytaniem:

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

Jednak trzeba by zaimportować kolekcji z powrotem do MongoDB pracować na nim lub użyć mongoexport do eksportu jako JSON lub CSV używające tej samej flagi zapytania (-q) jako mongodump.

+0

dzięki za odpowiedź, ale chcę, żeby to było w zwykłym js, który działa przy użyciu mongo muszla. – sudesh

21

http://www.mongodb.org/display/DOCS/Scripting+the+shell akapitów „Różnice między skryptowym a interaktywnym/Drukowanie ".

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

+0

Świetna sztuczka! Bez żadnych plików – ruX

+0

Takie podejście staje się trudne, jeśli chcesz umieścić zapytanie wewnątrz znaleziska () ze względu na znak ucieczki.W tym przypadku najlepiej użyć odpowiedzi @milan powyżej z osobnym plikiem zapytania – AndrewL

+0

@AndrewL Czy możesz zamiast tego używać pojedynczych cudzysłowów? Myślę, że to nie powinno robić tak wiele ucieczki czy coś, prawda? – Erhannis

12

Można pominąć pętlę podczas korzystania forEach():

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

Jeszcze bardziej kompaktowy: db.users.find(). ForEach (printjson); – AndrewL

2

Dla odrębny trzeba utworzyć plik script.js o treści:

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

następnie w perspektywie konsoli:

mongo --quiet script.js > result.txt 
Powiązane problemy