猿问

如何编写插入 golang 代码?

这是我的 json 文件,我想使用 golang 和 mgo 以这种 json 格式插入数据


[{

    "_id" : ObjectId("57307906f051147d5317984e"),

    "dateAdded" : " 20015-11-10 23:00:00 +0000 UTC"

    "firstName" : "chetan",

    "lastName" : "kumar",

    "age" : 23,


    "user" : [

        {

            "userid" : ObjectId("57307906f051147d5317984a"),

            "firstName" : "chetan",

            "lastName" : "kumar",

            "age" : 23

        },

        {

            "userid" : ObjectId("57307906f051147d5317984b"),

            "firstName" : "nepolean",

            "lastName" : "dang",

            "age" : 26

        },

        {

            "userid" : ObjectId("57307906f051147d5317984c"),

            "firstName" : "Raj",

            "lastname" : "kumar",

            "age" : 26

        }

    ],

    "sales" : [

        {

            "salesid" : ObjectId("57307906f051147d5317984d"),

            "firstName" : "ashu",

            "lastName" : "jha",

            "age" : 27

        }

    ]

}]

现在,这是我试图通过 golang 和 mgo 插入数据的 go 文件


package main


import(

    "fmt"

    "time"

    "net/http"

    "github.com/gorilla/mux"

        "gopkg.in/mgo.v2"

        "gopkg.in/mgo.v2/bson"

)

type userinfo struct{


    ID          bson.ObjectId   `json:"_id" bson:"_id"`

        USER        []User      `json:"user" bson:"user"`

    SALES       []Sales     `json:"sales" bson:"sales"`

    DATEADDED   time.Time   `json:"dateAdded" bson:"dateAdded"`

    NAME        string      `json:"name" bson:"name"`


type User struct{

    USERID      bson.ObjectId   `json:"userid" bson:"userid"`

    FIRSTNAME   string      `json:"firstName" bson:"firstName"`

    LASTNAME    string      `json:"lastName" bson:"lastName"`

    AGE     int     `json:"age" bson:"age"`


}

type Sales struct{

    SALESID     bson.ObjectId   `json:"salesid" bson:"salesid"`

    FIRSTNAME   string      `json:"firstName" bson:"firstName"`

    LASTNAME    string      `json:"lastName" bson:"lastName"`

    AGE     int     `json:"age" bson:"age"`


}



但这根本不起作用,请帮帮我


动漫人物
浏览 137回答 2
2回答

九州编程

这有很多错误。package mainimport (    "encoding/json"    "fmt"    "log"    "net/http"    "time"    "github.com/gorilla/mux"    "gopkg.in/mgo.v2"    "gopkg.in/mgo.v2/bson")type Userinfo struct {    ID        bson.ObjectId `bson:"_id,omitempty" json:"id"`    USER      []string      `json:"user" bson:"user"`    SALES     []string      `json:"sales" bson:"sales"`    DATEADDED time.Time     `json:"dateAdded" bson:"dateAdded"`    NAME      string        `json:"name" bson:"name"`}type User struct {    ID        bson.ObjectId `bson:"_id,omitempty" json:"id"`    FIRSTNAME string        `json:"firstName" bson:"firstName"`    LASTNAME  string        `json:"lastName" bson:"lastName"`    AGE       int           `json:"age" bson:"age"`}type Sales struct {    ID        bson.ObjectId `bson:"_id,omitempty" json:"id"`    FIRSTNAME string        `json:"firstName" bson:"firstName"`    LASTNAME  string        `json:"lastName" bson:"lastName"`    AGE       int           `json:"age" bson:"age"`}var session *mgo.Sessionfunc main() {    var err error    session, err = mgo.Dial("127.0.0.1")    if err != nil {        panic(err)    }    defer session.Close()    session.SetMode(mgo.Monotonic, true)    fmt.Fprintln(w, "conn")    router := mux.NewRouter().StrictSlash(true)    router.HandleFunc("/post/", post)    router.HandleFunc("/getusers/", getusers)    http.ListenAndServe(":8080", router)}func post(w http.ResponseWriter, r *http.Request) {    ms := session.Copy()    defer ms.Close()    cui := session.DB("userdb").C("userinfo")    cu := session.DB("userdb").C("user")    cs := session.DB("userdb").C("sales")    u := User{FIRSTNAME: "sam", LASTNAME: "billing", AGE: 25}    s := Sales{FIRSTNAME: "joe", LASTNAME: "root", AGE: 23}    if e := cu.Insert(u); e != nil {        log.Println(e.Error)        w.WriteHeader(500)        return    }    if e := cs.Insert(s); e != nil {        log.Println(e.Error)        w.WriteHeader(500)        return    }    ui := new(Userinfo)    ui.ID = bson.NewObjectId()    ui.NAME = "admin"    ui.USER = []string{u.Id.Hex()}    ui.SALES = []string{s.Id.Hex()}    ui.DATEADDED = time.Now()    if e := cui.Insert(ui); e != nil {        log.Println(e.Error)        w.WriteHeader(500)        return    }    w.WriteHeader(201)}func getusers(w http.ResponseWriter, r *http.Request) {    ms := session.Copy()    defer ms.Close()    cui := session.DB("userdb").C("userinfo")    cu := session.DB("userdb").C("user")    cs := session.DB("userdb").C("sales")    // Query for users of userinfo    uadm := new(Userinfo)    if e := cui.Find(bson.M{"name": "admin"}).One(uadm); e != nil {        log.Println(e.Error)    }    for _, userid := range uadm.USER {        tempu := new(User)        if e := cu.Find(bson.M{"_id": bson.ObjectIdHex(userid)}).One(tempu); e != nil {            log.Println(e.Error)            w.WriteHeader(500)            return        }        enc := json.NewEncoder(w)        if e := enc.Encode(tempu); e != nil {            log.Println(e.Error)            w.WriteHeader(500)            return        }    }}会议所有型号的单独集合我已将 Userinfo 的用户和销售字段更改为 []string,因为每个可独立编辑和可查询的模型都应该有自己的集合。id 引用被保存而不是整个对象,因此您可以通过 ObjectId 查询用户。用户信息应为大写

DIEA

您的语法在几个地方都关闭了。但是代码很乱,所以我会这样拆分:users := {USERID: new ObjectId(), FIRSTNAME: "sam",LASTNAME: "billing", AGE: 25}sales := {SALESID: new ObjectId(),FIRSTNAME: "joe", LASTNAME: "root", AGE: 23}info := &userinfo{ID:new ObjectId(), NAME:"Admin", USER: users, SALES: sales, DATEADDED: time.Now()}关于销售和用户的创建,这不是创建切片和结构的正确方法。Golang 中类型 T 的结构的实例化是T{}. 您可以以相同的方式创建切片。因此sales和users成为users := []User{User{USERID: new ObjectId(), FIRSTNAME: "sam",LASTNAME: "billing", AGE: 25}}sales := []Sales{Sales{SALESID: new ObjectId(),FIRSTNAME: "joe", LASTNAME: "root", AGE: 23}}然后,您应该查看 mgo 的文档。创建 ObjectId 的方式是bson.NewObjectId(). 现在,进行所有修改:func main() {    users := []User{User{USERID: bson.NewObjectId(), FIRSTNAME: "sam", LASTNAME: "billing", AGE: 25}}    sales := []Sales{Sales{SALESID: bson.NewObjectId(), FIRSTNAME: "joe", LASTNAME: "root", AGE: 23}}    info := &userinfo{ID: bson.NewObjectId(), NAME: "Admin", USER: users, SALES: sales, DATEADDED: time.Now()}    data, _ := json.MarshalIndent(info, "", "    ")    fmt.Println(string(data))}/* Prints{    "_id": "57402f27e13823740d742417",    "user": [        {            "userid": "57402f27e13823740d742415",            "firstName": "sam",            "lastName": "billing",            "age": 25        }    ],    "sales": [        {            "salesid": "57402f27e13823740d742416",            "firstName": "joe",            "lastName": "root",            "age": 23        }    ],    "dateAdded": "2016-05-21T11:49:27.507636096+02:00",    "name": "Admin"}*/
随时随地看视频慕课网APP

相关分类

Go
我要回答