【问题标题】:Using Go - How to Export MongoDB docs using the official mongoexport package?使用 Go - 如何使用官方 mongoexport 包导出 MongoDB 文档?
【发布时间】:2022-12-05 10:41:35
【问题描述】:

我今天早些时候试过了,它成功了。有更好的主意吗?我必须采用一种方法来获取密钥,即使是从不具有相同字段的文档中获取密钥也很棘手。提前致谢!

//get the all keys from the first document
var keys []string
for key, _ := range docs[0].Map() {
   keys = append(keys, key)
}

//Create the csv file for the upcoming io.writer
export, err := os.Create("export.csv")
if err != nil {
   log.Println(err.Error())
   panic(err)
}
defer export.Close()

//Initialize the mongoexport csv export writer.
csvExport := mongoexport.NewCSVExportOutput(keys, false, export)
defer csvExport.Flush()

//Write the header to the export
err = csvExport.WriteHeader()
if err != nil {
   log.Println(err.Error())
   panic(err)
}

//Iterate through each doc and write to the export.
for _, doc := range docs {
   err := csvExport.ExportDocument(*doc)
   if err != nil {
      log.Println(err.Error())
      panic(err)
   }
}

【问题讨论】:

    标签: mongodb go nosql mongoexport


    【解决方案1】:

    这是一种替代方法,您可以使用该方法从 bson.M 文档的一片中获取密钥并将它们导出到 CSV 文件。此方法使用 reflect 包从文档中获取密钥,并使用 encoding/csv 包将它们写入 CSV 文件。

    首先,您可以使用 reflect.ValueOf 函数获取切片中第一个文档的 reflect.Value。然后,您可以使用 Value 的 MapKeys 方法来获取文档中键的 []reflect.Value。最后,您可以使用 Value 的 String 方法将键转换为字符串并将它们写入 CSV 文件。

    以下是如何实施此方法的示例:

    // Import the reflect and encoding/csv packages
    import (
        "reflect"
        "encoding/csv"
    )
    
    // ...
    
    // Get the keys from the first document
    keys := reflect.ValueOf(docs[0]).MapKeys()
    
    // Create a slice of strings for the keys
    var keyStrings []string
    for _, key := range keys {
        keyStrings = append(keyStrings, key.String())
    }
    
    // Create a new CSV file for the export
    export, err := os.Create("export.csv")
    if err != nil {
        log.Println(err.Error())
        panic(err)
    }
    defer export.Close()
    
    // Create a new CSV writer for the export file
    csvExport := csv.NewWriter
    

    【讨论】:

      猜你喜欢
      • 2015-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-06
      • 2012-02-18
      • 1970-01-01
      相关资源
      最近更新 更多