去MongoDB驱动程序和结构,找到大写和小写的混乱


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

这是我的 Mongo DB 中的结构:

id_
pageUrl
token
pageId

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

type Token struct {
    PageUrl string
    Token string
    PageId string
}

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

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

这些bsonjson是什么?我只是把它放在那里,因为我在互联网上看到过,但它不起作用,我仍然只得到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"`
    }
}

这些jsonbson的东西被称为标签

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

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

我尝试遵循代码片段,似乎工作正常。

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

最新更新