首页 > 解决方案 > 如何将书籍集合导出到 MongoDB 中的 csv?

问题描述

我有一个从聚合中获取的名为“结果”的集合,它包含如下数据:

{
    "_id": {
        "$numberLong": "123"
    },
    "books": [{
        "DisplayName": "ABC",
        "transaction": "20"
        }
        {
        "DisplayName": "ABC",
        "transaction": "25"
        }
        .....]

     "_id": {
        "$numberLong": "124"
    },
    "books": [{
        "DisplayName": "BCE",
        "transaction": "100"
     }
    ....]
}

有什么可能的方法可以将其转换为这种形式的 csv 吗?

_id  | DisplayName | Transaction
123      ABC          20
123      ABC          25
124      BCE          100  

我尝试了以下代码:

mongoexport --db dbname --collection results --out D:/mongolearn/results.csv

但是我得到的输出 csv 文件是这样的:

"_id": { "$numberLong": "123} | {"books": [{"DisplayName": "ABC","transaction": "20"}{ "DisplayName": "ABC" | "transaction": "25"|

我是 MongoDB 的初学者,任何帮助将不胜感激。

标签: arraysmongodbmongodb-querypymongo

解决方案


Mongo 有一个名为mongoexport的内置终端方法,问题是您不能将聚合与它一起使用,因为它旨在通过查询过滤器而不是完整的聚合和数据处理来导出更基本的数据。

您可以像这样解决这个问题:

  1. 使用您的管道创建一个新的临时集合,并$out

db.results.aggregate([
    {
        $unwind: "$books"
    },
    {
        $project: {
            _id: 1,
            DisplayName: "$books.DisplayName",
            Transaction: "$books.transaction"
        }
    },
    {
        $out: "temp_collection"
    }
])
  1. 在您的终端中使用 `mongoexport,如下所示:
mongoexport -d dbname -c temp_collection -f _id,DisplayName,Transaction --csv > results.csv

显然,这也可以通过代码实现,只要您可以将整个集合保存在内存中,您就不必创建占位符集合。


推荐阅读