【问题标题】:mongoexport without _id field没有 _id 字段的 mongoexport
【发布时间】:2012-10-10 04:19:07
【问题描述】:

我正在使用 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") 参数,但到目前为止所有尝试都失败了。

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

谢谢

【问题讨论】:

    标签: json mongodb


    【解决方案1】:

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

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

    【讨论】:

    • 是的,我从一开始就这样做了,很惊讶在导出的文件中发现了 _id 字段。我只是仔细检查了一下,确实导出了 _id 字段。
    • 我只是用“_id”键迭代并删除了项目。
    • 来自documentation> 对于JSON输出格式,mongoexport只包含指定字段和_id字段,如果指定字段是子文档内的字段, mongoexport 包含子文档及其所有字段,而不仅仅是文档中的指定字段。
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        我应用了 quux00 的解决方案,但 forEach(printjson) 在输出中打印了 MongoDB Extended JSON 符号(例如 "last_update" : NumberLong("1384715001000")

        改用下面这行会更好:

        db.mycoll.find({}, {_id:0}).forEach(function (doc) {
        
            print( JSON.stringify(doc) );
        });
        

        【讨论】:

          【解决方案5】:

          mongoexport 好像没有这个选项。

          使用ramda-cli 剥离_id 看起来像:

          mongoexport --db mydb --collection mycoll -f name,age | ramda 'omit ["_id"]'
          

          【讨论】:

          • 尝试这个但继续获取_id。 mongoexport --db enso --collection places --out placesType.json -f "name,city,latitude,longitude,objectID,type" --jsonArray | R 'omit ["_id"]' 获取必须指定--save、--no-save 或--vanilla。我尝试了每一个,并使用 _id 和此控制台错误ARGUMENT 'omit' __ignored__ ARGUMENT '["_id"]' __ignored__ 进行相同的输出。有什么想法吗?
          • 我也收到“指定 --save、--no-save 或 --vanilla”的错误
          【解决方案6】:

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

          mongoexport --db <dbName> --collection <collectionName> --csv --fields "<fieldOne>,<fieldTwo>,<fieldThree>" > mongoex.csv
          

          【讨论】:

            【解决方案7】:
            mongo <server>/<database> --quiet --eval "db.<collection>.find({}, {_id:0,<field>:1}).forEach(printjson);" > out.txt
            

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

            【讨论】:

              【解决方案8】:

              mongoexport不能省略“_id”

              sed 是一个强大的命令:

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

              原答案来自Exclude _id field using MongoExport command

              【讨论】:

                【解决方案9】:

                这行得通:

                mongoexport --db db_name --collection collection_name | sed '/"_id":/s/"_id":[^,]*,//' > file_name.json
                

                【讨论】:

                【解决方案10】:

                只需在 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/

                【讨论】:

                  【解决方案11】:

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

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

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

                  【讨论】:

                    【解决方案12】:

                    mongoexport 的输出传递到jq 并删除那里的_id 字段。

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

                    更新:添加link to jq

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2017-01-27
                      • 2012-03-24
                      • 2016-09-25
                      • 2021-07-03
                      • 2012-07-19
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多