go mongodb 驱动程序和结构体,发现大写和小写混乱

7 database go mongodb

var Messages []Token
c2 := session.DB("mydatabase").C("pages")
query2 := c2.Find(bson.M{}).All(&Messages)
fmt.Print(Messages)
Run Code Online (Sandbox Code Playgroud)

这是我的 Mongo DB 中的结构:

id_
pageUrl
token
pageId
Run Code Online (Sandbox Code Playgroud)

我首先尝试了这样的结构:

type Token struct {
    PageUrl string
    Token string
    PageId string
}
Run Code Online (Sandbox Code Playgroud)

但只打印了令牌,可能是因为它都是小写的。未检索其他两个字段,因为它们包含大写字母。然后我尝试了这个:

type Token struct {
    PageUrl string `json: "pageUrl" bson: "pageUrl"`
    Token string `json: "token" bson: "token"`
    PageId string `json: "pageId" bson: "pageId"`
}    
Run Code Online (Sandbox Code Playgroud)

bson那些是什么json?我只是把它放在那里,因为我在互联网上看到过,但它不起作用,我仍然只得到该token字段

更新嵌套文档的解决方案和测试示例

我看到没有关于这个问题的帖子,所以请记住,解决方案是删除json:和之间的空格bson: 另外,为了帮助那些可能想知道如何对嵌套结构执行此操作的人,这里我给出了两个对我有用的结构:

type Token struct {
    PageUrl string `json:"pageUrl" bson:"pageUrl"`
    Token string `json:"token" bson:"token"`
    PageId string `json:"pageId" bson:"pageId"`
}


type Message struct {
    Sender struct {
        Id string `json:"id" bson:"id"`
    } `json:"sender" bson:"sender"`
    Recipient struct {
        Id string `json:"id" bson:"id"`
    } `json:"recipient" bson:"recipient"`
    Message struct {
        Mid string `json:"mid" bson:"mid"`
        Seq int `json:"seq" bson:"seq"`
        Message string `json:"text" bson:"text"`
    }
}
Run Code Online (Sandbox Code Playgroud)

arm*_*ong 7

这些json东西bson称为标签

我最好的猜测是,因为 Go 要求通过大写第一个字符来公开变量或函数,所以像 json 或 bson 这样的序列化框架需要 struct 大写其第一个字符来公开字段(以便它可以看到该字段)。因此,应该使用标签定义公开的字段名称(以避免限制)。

bson:和之间的空格"token"似乎导致了问题

我尝试了以下代码片段,似乎工作正常。

type Token struct {
    PageUrl string `json:"pageUrl" bson:"pageUrl"`
    Token string `json:"token" bson:"token"`
    PageId string `json:"pageId" bson:"pageId"`
} 
Run Code Online (Sandbox Code Playgroud)