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"`
}
这些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"`
}
}
这些json
和bson
的东西被称为标签
我最好的猜测是,因为 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"`
}