File write operations in mongo script?
You can skip the while loop using forEach()
:
db.users.find().forEach(printjson);
http://www.mongodb.org/display/DOCS/Scripting+the+shell paragraph "Differences between scripted and interactive/ Printing".
./mongo server.com/mydb --quiet --eval "db.users.find().forEach(printjson);" > 1.txt
You could use print and then redirect output:
script.js:
cursor = db.users.find();
while(cursor.hasNext()){
printjson(cursor.next());
}
then run the script and redirect output to a file:
mongo --quiet script.js > result.txt
Whenever I need to write the result of a mongo query to a local file I generally use the the writeFile(pathToFile, stringContents)
function.
Example: let's say that you quickly need to find the email of all registered users and send it to your buddy Jim in the marketing department.
$ mongo mongodb://my-fancy-mongo-server --ssl -u fancy_username -p fancy_password
successfully connected to my-fancy-mongo-server!
> emails = db.users.distinct('email_address')
> writeFile("jims_email_list.json", tojson(emails))
or if Jim expect's a CSV file then
$ mongo mongodb://my-fancy-mongo-server --ssl -u fancy_username -p fancy_password
successfully connected to my-fancy-mongo-server!
> emails = db.users.distinct('email_address')
> writeFile("jims_email_list.csv", emails.join("\n"))
You can now send Jim the list of emails and save the day!
To important things to notice about the writeFile
function:
- The second argument must be a string.
- The first argument must be a file that doesn't already exist, otherwise you will get an error.