当前位置: 首页 > 面试题库 >

在mongodb-go-driver中,如何将BSON编组/解组为结构

华升
2023-03-14
问题内容

我是mongodb-go-driver的新手。但是我被困住了。

cursor, e := collection.Find(context.Background(), bson.NewDocument(bson.EC.String("name", id)))

for cursor.Next(context.Background()) {

    e := bson.NewDocument()
    cursor.Decode(e)

    b, _ := e.MarshalBSON()
    err := bson.Unmarshal(b, m[id])
}

查看m [id]的内容时,它没有内容-全部为null。

我的地图是这样的:m map [string] Language

语言定义如下:

type Language struct {
    ID         string   `json:"id" bson:"_id"`                   // is this wrong?
    Name       string   `json:"name" bson:"name"`
    Vowels     []string `json:"vowels" bson:"vowels"`
    Consonants []string `json:"consonants" bson:"consonants"`
}

我究竟做错了什么?

我正在使用此示例进行学习:https :
//github.com/mongodb/mongo-go-
driver/blob/master/examples/documentation_examples/examples.go


问题答案:

正式的MongoDB驱动程序对MongoDB ObjectId使用objectid.ObjectID类型。此类型是:

type ObjectID [12]byte

因此,您需要将结构更改为:

type Language struct {
    ID         objectid.ObjectID   `json:"id" bson:"_id"`             
    Name       string   `json:"name" bson:"name"`
    Vowels     []string `json:"vowels" bson:"vowels"`
    Consonants []string `json:"consonants" bson:"consonants"`
}

我在以下方面取得了成功:

m := make(map[string]Language)
cursor, e := collection.Find(context.Background(), bson.NewDocument(bson.EC.String("name", id)))

for cursor.Next(context.Background()) {

    l := Language{}
    err := cursor.Decode(&l)
    if err != nil {
        //handle err
    }
    m[id] = l // you need to handle this in a for loop or something... I'm assuming there is only one result per id
}


 类似资料:
  • 问题内容: 我正在使用https://github.com/mongodb/mongo-go- driver ,目前正在尝试实现这种结构的部分更新 例如,如果我有 然后,我希望存储文档中唯一的“标题”字段将被更改。 我需要写类似 问题是我不想用或手动编码每个非空字段。我尝试使用但出现错误 无法为* models.NoteUpdate类型创建元素,请尝试使用bsoncodec.ConstructEl

  • 问题内容: 我有一个这样的结构: 但是,即使MyStruct实例完全为空(意味着所有值都是默认值),它也会被序列化为: 我知道encoding / json文档指定“空”字段为: false,0,任何nil指针或接口值以及任何长度为零的数组,切片,映射或字符串 但不考虑具有所有空/默认值的结构。它的所有字段也都标有,但这无效。 如何获取JSON包以 不 封送我的字段为空结构? 问题答案: 正如文档

  • 问题内容: 我想将mongo-go-driver中的 bson转换为json。 我应该小心处理,因为如果数据中存在则失败。 例如,我想将以下bson数据转换为json。 以下失败。 问题答案: 如果您知道BSON的结构,则可以创建一个实现和接口的自定义类型,并根据需要处理NaN。例: 如果您的BSON具有任意结构,则唯一的选择是使用反射遍历该结构,并将所有出现的NaN转换为类型(可能是如上所述的自

  • 问题内容: 我正在寻找的等效于Document.parse() 在golang中,这允许我直接从json创建bson吗?我不想创建用于编组的中间Go结构 问题答案: 该程序包有一个名为的函数,它可以完全满足您的需求。 该参数应包含JSON字符串作为值。 UnmarshalJSON解组一个JSON值,该值可能包含BSON扩展JSON规范中定义的非标准语法。 例:

  • 问题内容: 我是Go的新手,现在遇到了问题。我有一个称为Message的类型,它是这样的结构: 我也有一个名为CreateMessage的类型,如下所示: 我有一个像的JSON字符串。 当我用来将其解码为Message变量时,答案是。 因此,我可以将JSON解码为Message结构并更改其Data的接口{}以根据Cmd键入CreateMessage吗? 我试图将Data直接转换为CreateMes

  • 编辑问题以包括所需的行为、特定问题或错误以及重现问题所需的最短代码。这将帮助其他人回答问题。 我有一个Json: 我不知道如何将元帅行星字段解构到map[string]int中,所以我可以访问元素而无需像这个例子中那样取消marshade:json来映射Golang 代码如下: fmt.Println(user.Planets.Planet[“地球])-返回 fmt.Println(user.Pl