2 回答
TA贡献1845条经验 获得超8个赞
您可以将所有内容存储在地图中。该mgo/bson包提供了bson.M一种可用于存储任意数据的数据类型,并且由于 MongoDB 不强制实施强模式,因此mgo在bson.M内部对所有内容使用该类型。
如果你只是想显示数据,使用 abson.M应该没问题,但是一旦你想开始使用它,你应该考虑使用 struct 代替。否则,您的程序中将需要大量类型断言。例如,假设您想以result["title"]大写形式打印文档的标题 ( )。通过使用 just bson.M,您的代码将如下所示:
// is there a title attribute?
if title, ok := result["title"]; ok {
// is it a string? (and not another map or integer or something else)
if titleStr, ok := title.(string); ok {
// ok, it is a string
fmt.Println("Title: ", strings.ToUpper(titleStr))
}
}
当您允许mgo将数据转换为结构时,您的程序将变得更具可读性和更易于维护。然后,相同的代码可能读作:
fmt.Println(strings.ToUpper(result.Title))
通常,您为要处理的每种类型的文档(即,一种类型用于“用户”,另一种用于“博客文章”等)定义一种结构类型,其中包含您可能想要访问的每个属性。如果您的用户文档碰巧没有分配电子邮件地址,您在解码时只会得到一个空字符串(或更一般地说,零值)。
- 2 回答
- 0 关注
- 164 浏览
添加回答
举报