如何以任何格式将写在csv文件中的用户数据保存在mongodb中?

时间:2018-06-28 11:26:51

标签: csv go

假设有一个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中,但不会格式化需要保存的数据

我如何实现我的目标?

1 个答案:

答案 0 :(得分:0)

我认为您可以使用反射在结构上映射csv的每一行。像json编码包这样的事情是从字符串到结构。然后可以将该结构插入mongodb中。

您想要这样的东西吗? https://play.golang.org/p/hg3K-u8l9mx

您需要对其进行更多保护,并且可以对其进行很多速度改进,但这类似于json pkg中的Unmarshal。