File write operations in mongo script?

后端 未结 6 1563
执念已碎
执念已碎 2020-12-07 22:22

Is this possible to write the query result to the file from mongo js script. I have searched a lot, but I didn\'t find any solution.

ex:-

cursor = db         


        
相关标签:
6条回答
  • 2020-12-07 22:46

    For distinct you have to create script.js file with contents:

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

    then in console run:

    mongo --quiet script.js > result.txt
    
    0 讨论(0)
  • 2020-12-07 22:51

    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
    
    0 讨论(0)
  • 2020-12-07 23:07

    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
    
    0 讨论(0)
  • 2020-12-07 23:07

    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:

    1. The second argument must be a string.
    2. The first argument must be a file that doesn't already exist, otherwise you will get an error.
    0 讨论(0)
  • 2020-12-07 23:07

    Wouldn't it be simpler to use one of the Mongo drivers for a general purpose language (such as Python, Ruby, Java, etc) and write your results to a file that way, in a format you can use (such as CSV, etc.)?

    UPDATE: According to the documentation for mongodump you can export a collection with a query:

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

    However you would need to import that collection back into MongoDB to operate on it or use mongoexport to export as JSON or CSV using the same query flag (-q) as mongodump.

    0 讨论(0)
  • 2020-12-07 23:11

    You can skip the while loop using forEach():

    db.users.find().forEach(printjson);
    
    0 讨论(0)
提交回复
热议问题