2 回答
TA贡献1794条经验 获得超7个赞
MongoDB 实际上将数据存储为二进制 JSON(bson),这与 JSON 不同。这有点令人困惑,因为如果您使用 mongo shell 访问数据库,您将返回原始 JSON,但它实际上是一种转换,而不是存储格式。因此,在将数据存储到数据库时,“mgo”驱动程序序列化为bson。
此序列化忽略json导出键,并通过默认为结构字段的小写版本选择适当的名称。(请参阅bson.Marshal go doc。)如果您指定bson导出键,它将忽略结构字段名称并使用您指定为bson导出键的任何内容。
例如,
type User struct {
Name string
UserAge int `bson:"age"`
Phone string `json:"phoneNumber"`
}
将在 MongoDB 中产生以下结构:
{
"name": "",
"age": 0,
"phone": ""
}
所以看起来你的结构字段应该为你处理大部分事情。
在它咬你之前你可能看不到的一个“问题”是,如果你不指定bson导出键,你就没有能力遗漏bson:",omitempty"空白字段,或者bson:",inline"封送嵌入(或嵌套)结构.
例如,这是您处理嵌入式结构的方式:
type Employee struct {
User `bson:",inline"`
JobTitle string
EmployeeId string
Salary int
}
我在 bson.Marshal 上提供的链接中指定了这些类型的内容。希望有帮助!
TA贡献1786条经验 获得超13个赞
您可以使用以下(来自 thrift 测试文件 git.apache.org/thrift.git/lib/go/test/GoTagTest.thrift)
struct tagged {
1: string string_thing,
2: i64 int_thing (go.tag = "json:\"int_thing,string\""),
3: optional i64 optional_int_thing
}
- 2 回答
- 0 关注
- 170 浏览
添加回答
举报