mongodb - 如何在 bson.D 原语范围内。切片 mongo-go-driver?
问题描述
我的数据结构是
{
_id: ObjectID,
...
fields: [
{ name: "Aryan" },
{ books : [ 1,2,3 ] },
]
}
在我们的应用程序中,用户可以定义自己的字段数据结构,但具有键值结构。因此,我们无法知道数据的结构。
所以在我们的文档结构中,我们有
type Document struct {
Fields map[string]interface{}
}
由于 mongo 返回的第二个参数是原语。但我们无法超越它。
如何获取书籍 ID [1,2,3] 或名称值“Aryan”等单个值?
解决方案
理想情况下,您应该避免使用interface{}
类型,因为它很容易出错并且编译器无法帮助您。惯用的方法是使用 BSON 标签为您的模型定义一个结构,如本例中的`
type MyType struct {
ID primitive.ObjectID `bson:"_id,omitempty"`
Fields []Field `bson:"fields,omitempty"`
}
type Field struct {
Name string `bson:"name,omitempty"`
Books []int `bson:"books,omitempty"`
}
这里的字段被定义为所有可能字段的组合,这同样不理想,但至少编译器可以帮助您和开发人员了解对数据库文档的期望。