mongo脚本中的文件写操作?

时间:2012-01-23 11:51:18

标签: mongodb

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

例如: -

cursor = db.users.find();

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

6 个答案:

答案 0 :(得分:78)

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

的script.js:

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

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

mongo --quiet script.js > result.txt

答案 1 :(得分:22)

http://www.mongodb.org/display/DOCS/Scripting+the+shell段落“脚本和互动/印刷之间的差异”。

./ mongo server.com/mydb --quiet --eval“db.users.find()。forEach(printjson);” &GT; 1.txt的

答案 2 :(得分:13)

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

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

答案 3 :(得分:6)

每当我需要将mongo查询的结果写入本地文件时,通常都使用Richard Shelby May 6, 1934 (age 84) Lawyer U.S. House Alabama Senate January 3, 1987 2022 Assumed office: January 3, 2018 函数。

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

writeFile(pathToFile, stringContents)

或者如果吉姆期望是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.json", tojson(emails))

您现在可以向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.csv", emails.join("\n")) 函数的重要事项:

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

答案 4 :(得分:3)

Mongo drivers中的一个用于通用语言(例如Python,Ruby,Java等),并将结果写入文件,以您可以采用的格式,这不是更简单吗?使用(如CSV等)?

更新:根据mongodump的文档,您可以使用查询导出集合:

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

但是,您需要将该集合导入MongoDB以对其进行操作,或使用mongoexport使用与-q相同的查询标记(mongodump)导出为JSON或CSV。

答案 5 :(得分:2)

对于distinct,您必须创建包含内容的script.js文件:

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

然后在控制台运行中:

mongo --quiet script.js > result.txt