假设有一个csv文件,其格式如下:-
第一个文件
firstname|lastname|Email| other fields
| | |
| | |
| | |
| | |
第二个文件:-
email|firstname|lastname|other fields
| | |
| | |
| | |
| | |
第三档
lastname|firstname|email|other fields
| | |
| | |
| | |
| | |
所以我想将这三个文件分别保存在mongodb数据库中。以给定的以下格式:
格式为first_name, last_name,email, otherfield
我正在使用的代码:-
package main
import (
"encoding/csv"
"gopkg.in/mgo.v2"
"io"
"log"
"os"
)
type Mongo struct {
// Id int `json:"_id" bson:"_id"`
FirstName string `json:"first_name,omitempty" bson:"first_name,omitempty"`
LastName string `json:"last_name,omitempty" bson:"last_name,omitempty"`
Email string `json:"email,omitempty" bson:"email,omitempty"`
PhoneNumber string `json:"phone_number,omitempty" bson:"phone_number,omitempty"`
Gender string `json:"gender,omitempty" bson:"gender,omitempty"`
Address string `json:"address,omitempty" bson:"address,omitempty"`
Apartment string `json:"apartment,omitempty" bson:"apartment,omitempty"`
Description string `json:"description,omitempty" bson:"description,omitempty"`
}
func main() {
session, err := mgo.Dial("localhost")
if err != nil {
panic(err)
}
defer session.Close()
session.SetMode(mgo.Monotonic, true)
c := session.DB("Import_Users").C("users")
file, err := os.Open("customers.csv")
if err != nil {
panic(err)
}
defer file.Close()
reader := csv.NewReader(file)
for {
record, err := reader.Read()
if err == io.EOF {
break
} else if err != nil {
panic(err)
}
err = c.Insert(&Mongo{record[0], record[1], record[2], record[3], record[4], record[5], record[6], record[7]})
if err != nil {
panic(err)
}
log.Printf("%#v", record)
}
}
我正在使用的代码很容易将数据保存在mongodb中,但不会格式化需要保存的数据
我如何实现我的目标?
答案 0 :(得分:0)
我认为您可以使用反射在结构上映射csv的每一行。像json编码包这样的事情是从字符串到结构。然后可以将该结构插入mongodb中。
您想要这样的东西吗? https://play.golang.org/p/hg3K-u8l9mx
您需要对其进行更多保护,并且可以对其进行很多速度改进,但这类似于json pkg中的Unmarshal。