【问题标题】: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