mongo脚本中的文件写操作?

sud*_*esh 48 mongodb

是否可以将查询结果写入mongo js脚本中的文件.我搜索了很多,但我找不到任何解决方案.

例如: -

cursor = db.users.find();

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

mil*_*lan 80

您可以使用print然后重定向输出:

的script.js:

cursor = db.users.find();
while(cursor.hasNext()){
    printjson(cursor.next());
}
Run Code Online (Sandbox Code Playgroud)

然后运行脚本并将输出重定向到文件:

mongo --quiet script.js > result.txt
Run Code Online (Sandbox Code Playgroud)

  • @NeluMalancea你只需使用任何Mongo shell命令行args.所以要在远程主机上指定数据库,例如mongo --host MYSERVER DATABASENAME --quiet script.js> result.txt (2认同)
  • @NeluMalancea您可以使用``dr = new Mongo("127.0.0.1:27017").getDB("dr")``然后用dr为你的集合添加前缀.这将使您能够使用多个数据库; 即从一个副本读到另一个副本等. (2认同)
  • 这个答案不符合原意.有没有办法从mongo脚本写入文件? (2认同)

Rom*_*nov 22

http://www.mongodb.org/display/DOCS/Scripting+the+shell段落"脚本和交互/打印之间的差异".

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


Oub*_*ine 14

您可以使用forEach()以下命令跳过while循环:

db.users.find().forEach(printjson);
Run Code Online (Sandbox Code Playgroud)

  • 更紧凑:db.users.find().forEach(printjson); (7认同)

fer*_*hur 8

每当我需要将mongo查询的结果写入本地文件时,通常都会使用该writeFile(pathToFile, stringContents)函数。

示例:假设您很快需要查找所有注册用户的电子邮件,并将其发送给市场部门的好友Jim。

$ 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))
Run Code Online (Sandbox Code Playgroud)

或者,如果Jim期望是CSV文件,则

$ 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"))
Run Code Online (Sandbox Code Playgroud)

您现在可以向Jim发送电子邮件列表并保存一天!

要注意有关该writeFile功能的重要事项:

  1. 第二个参数必须是字符串。
  2. 第一个参数必须是尚不存在的文件,否则您将得到一个错误。

  • 它是NodeJS fs API的一部分。参见此处:https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback (2认同)
  • Mongo 通常倾向于添加一些更奇特的函数而不记录它们。```writeFile``` 就是这样的一个例子。这是正常的 mongo shell 功能,只是他们决定不记录它。mongo 中有很多未公开的函数,包括更多的文件系统 I/O 函数、允许用户从键盘输入数据的函数、允许从 mongo shell 执行操作系统命令的函数等等。NodeJS 没有在 mongo shell 中实现,因为 NodeJS 的大多数其他功能在 mongo shell 中不起作用。```writeFile``` 还有一些这样做,但很少。 (2认同)