具体而言,我想打印的MongoDB结果find()
到一个文件中。 JSON对象是太大,所以我无法查看与shell窗口大小整个对象。
Answer 1:
外壳提供了一些好的,但隐藏的功能,因为它是一个互动的环境。
当您从一个JavaScript文件运行命令通过蒙戈commands.js你不会得到相当一致的行为。
这种情况有解决方法有两种。
(1)假出壳并使其觉得你是在交互模式
$ mongo dbname << EOF > output.json
db.collection.find().pretty()
EOF
要么
(2)使用Javascript将结果翻译了的find()
成可打印的JSON
mongo dbname command.js > output.json
其中command.js包含此(其当量或):
printjson( db.collection.find().toArray() )
这将相当打印结果的阵列,其中包括[ ]
-如果你不想,你可以遍历数组和printjson()
的每个元素。
顺便说一句,如果你正在运行只是一个单一的JavaScript语句,你不必把它放在一个文件,而是你可以使用:
$ mongo --quiet dbname --eval 'printjson(db.collection.find().toArray())' > output.json
Answer 2:
既然你这样做是在终端上,只是想在一个健全的方式来检查的记录,你可以使用这样的伎俩:
mongo | tee somefile
使用会话正常- db.collection.find().pretty()
或任何你需要做的,忽略了长时间的输出,并退出。 您的会话中的将在文件tee
写信给。
要留意的是,输出可能包含转义序列和其他垃圾由于蒙戈外壳期待的交互式会话。 less
正常处理这些。
Answer 3:
只要把你想运行到一个文件中的命令,然后将它传递到外壳与数据库名称一起,并将输出重定向到一个文件中。 所以,如果你find命令是find.js
和你的数据库是foo
,它应该是这样的:
./mongo foo find.js >> out.json
Answer 4:
把你的查询(例如db.someCollection.find().pretty()
到一个JavaScript文件,比方说query.js
。 然后在你的操作系统的shell命令使用运行它:
mongo yourDb < query.js > outputFile
查询结果将被命名为“OUTPUTFILE”的文件中。
默认情况下,蒙戈打印出第20个文档IIRC。 如果您想了解更多,你可以在蒙戈外壳,如定义新的价值,批量大小
DBQuery.shellBatchSize = 100
。
Answer 5:
使用print
和JSON.stringify
您只需出示有效的 JSON
结果。
使用--quiet
标志输出滤波壳噪音。
使用--norc
标志,以免.mongorc.js
评价。 (我不得不这样做,因为一个漂亮的格式器,我使用,产生无效JSON输出)使用DBQuery.shellBatchSize = ?
更换?
与实际结果的限制,以避免分页。
最后,使用tee
管道的终端输出到文件:
// Shell:
mongo --quiet --norc ./query.js | tee ~/my_output.json
// query.js:
DBQuery.shellBatchSize = 2000;
function toPrint(data) {
print(JSON.stringify(data, null, 2));
}
toPrint(
db.getCollection('myCollection').find().toArray()
);
希望这可以帮助!
Answer 6:
使用此答案由阿霞卡姆斯基,我写了一个单行蝙蝠脚本的Windows。 该行如下所示:
mongo --quiet %1 --eval "printjson(db.%2.find().toArray())" > output.json
然后一个可以运行它:
exportToJson.bat DbName CollectionName
Answer 7:
也有mongoexport对于这一点,但我不知道,因为它的版本可用。
例:
mongoexport -d dbname -c collection --jsonArray --pretty --quiet --out output.json
Answer 8:
由于答案通过Neodan mongoexport是相当有用的-q
查询选项。 它还转换ObjectId
以JSON的标准格式"$oid"
。 例如:
mongoexport -d yourdb -c yourcol --jsonArray --pretty -q '{"field": "filter value"}' -o output.json