在 Go 中序列化 MongoDB 数据时的空属性

这可能是一个非常愚蠢的问题,但在网上搜索了两个小时后,我在这里发布了这个问题。


我尝试学习 Go 并有一个非常简单的“Hello World”应用程序,它使用 Mongo 作为数据源。我可以正常连接,我可以获取数据,并且对象的数量还可以。


问题是,我将数据映射到的对象具有空属性,尽管 Mongo 中有数据。


我在 mongo 中有一个非常简单的集合,称为具有 ~12k 记录的站,如下所示:


{ "_id" : ObjectId("563c8d56819c3c91076b7c13"), "nm" : "00000BE8" }

{ "_id" : ObjectId("563c8d57819c3c91076b7c1a"), "nm" : "00000C01" }

{ "_id" : ObjectId("563c8d58819c3c91076b7c1d"), "nm" : "00000C02" }

{ "_id" : ObjectId("563c8d58819c3c91076b7c1f"), "nm" : "00000C31" }

{ "_id" : ObjectId("563c8d5d819c3c91076b86c1"), "nm" : "000013E0" }

{ "_id" : ObjectId("563c8d5d819c3c91076b86c5"), "nm" : "0000110B" }

整个 Go 程序如下所示:


package main


import (

    "log"

    "gopkg.in/mgo.v2"

)


type StationConfig struct {

        id     string   `bson:"_id,omitempty"`

        name   string   `bson:"nm"`

}


func main() {

        session, err := mgo.Dial("192.168.1.41")

        if err != nil {

                panic(err)

        }

        defer session.Close()


        c := session.DB("metos").C("stations")


        var stationConfigs []StationConfig            

        err = c.Find(nil).Limit(100).All(&stationConfigs)


        if err != nil {

                log.Fatal(err)

        }


        log.Printf("Found document: %+v\n", stationConfigs)

}

但是当我运行程序时,_id 和 nm 的值没有分配给各自的结构属性,我得到以下输出:


Found document: [{id: name:} {id: name:} {id: name:} {id: name:} 

    {id: name:} {id: name:} {id: name:} {id: name:} {id: name:} 

    {id: name:} {id: name:} {id: name:} {id: name:} {id: name:} 

    {id: name:} {id: name:} {id: name:} {id: name:} {id: name:} 

    {id: name:} {id: name:} {id: name:} ... and so on ... ]

我错过了什么?


呼如林
浏览 173回答 1
1回答

一只名叫tom的猫

我不熟悉 MongoDB Go API,但我认为您的结构字段应该是公开的,以便 MongoDB API 能够填充它们。尝试公开您的字段,看看它是否有效:type StationConfig struct {        ID     string   `bson:"_id,omitempty"`        Name   string   `bson:"nm"`}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go