29

我正在使用 mongoexport 将一些数据导出到 .json 格式的文件中,但是该文档具有由 _id:IDVALUE 元组引入的大尺寸开销。

我发现了一个类似的帖子Is there a way to retrieve data from MongoDB without the _id field? 关于如何在从 mongo 检索数据时省略 _id 字段,但不导出。建议使用:.Exclude("_id")。我试图 reqrite mongoexport 的 --query 参数以某种方式包含该.Exclude("_id")参数,但到目前为止所有尝试都失败了。

请建议这样做的正确方法是什么,或者我应该恢复使用一些导出后技术吗?

谢谢

4

12 回答 12

18

似乎没有办法_id使用 mongoexport 排除字段(例如 )。

这是一个在中等大小的数据库上对我有用的替代方案:

mongo myserver/mydb --quiet --eval "db.mycoll.find({}, {_id:0}).forEach(printjson);" > out.txt

在大型数据库(数百万条记录)上,它可能需要一段时间,运行它会影响人们尝试在系统上执行的其他操作:

于 2013-05-07T18:17:49.650 回答
12

这有效:

mongoexport --db db_name --collection collection_name | sed '/"_id":/s/"_id":[^,]*,//' > file_name.json
于 2018-04-18T09:05:33.333 回答
8

我知道您指定要以 JSON 格式导出,但如果您可以替换 CSV 数据,则本机 mongo 导出将起作用,并且比上述解决方案快很多

mongoexport --db <dbName> --collection <collectionName> --csv --fields "<fieldOne>,<fieldTwo>,<fieldThree>" > mongoex.csv
于 2015-08-31T15:35:52.543 回答
6

将输出管道输入mongoexportjq删除_id那里的字段。

mongoexport --uri=mongodb://localhost/mydb --collection=my_collection \
  | jq 'del(._id)'

更新:添加到 jq 的链接

于 2020-10-09T11:05:53.343 回答
5

mongoexport似乎没有这样的选择。

使用ramda-cli剥离_id将如下所示:

mongoexport --db mydb --collection mycoll -f name,age | ramda 'omit ["_id"]'
于 2015-06-01T17:53:49.077 回答
4

我应用了 quux00 的解决方案,但在输出中forEach(printjson)打印了MongoDB 扩展 JSON表示法(例如"last_update" : NumberLong("1384715001000").

最好使用以下行:

db.mycoll.find({}, {_id:0}).forEach(function (doc) {

    print( JSON.stringify(doc) );
});
于 2014-08-27T15:42:03.517 回答
2
mongo <server>/<database> --quiet --eval "db.<collection>.find({}, {_id:0,<field>:1}).forEach(printjson);" > out.txt

如果您有一些查询要执行更改""并将您的''条件写入like 。find""find("age":13)

于 2016-01-20T03:06:14.803 回答
0

排除“_id”等子文档信息最简单的方法就是将其导出为csv,然后使用工具将csv转换为json。

于 2013-12-28T06:38:16.080 回答
0

只需在 mongoexport 命令中使用--type=csv选项。

mongoexport --db=<db_name> --collection=<collection_name> --type=csv --field=<fields> --out=<Outfilename>.csv

对于 MongoDb 3.4 版,您也可以在 mongoexport 命令中使用--noHeaderLine选项来排除 csv 导出中的字段标题。

详情:https ://docs.mongodb.com/manual/reference/program/mongoexport/

于 2019-10-30T04:09:12.580 回答
0

在我的情况下,导出到文件中并使用正则表达式替换空值

"_id": "f5dc48e1-ed04-4ef9-943b-b1194a088b95"

我用过"_id": "(\w|-)*"

于 2020-04-25T21:28:08.090 回答
0

mongoexport不能省略“_id”

sed是一个强大的命令:

mongoexport --db mydb --collection mycoll -f name,age | sed '/"_id":/s/"_id":[^,]*,//'

原始答案来自使用 MongoExport 命令的 Exclude _id 字段

于 2018-04-13T02:28:45.887 回答
-7

您是否尝试过使用--fields标志指定字段?未提及的所有字段都从导出中排除。

为了可维护性,您还可以将字段写入单独的文件并使用--fieldFile.

于 2012-10-19T14:33:42.390 回答