首页 > 解决方案 > 如何在 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”等单个值?

标签: mongodbgobson

解决方案


理想情况下,您应该避免使用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"`
}

这里的字段被定义为所有可能字段的组合,这同样不理想,但至少编译器可以帮助您和开发人员了解对数据库文档的期望。


推荐阅读