如何使用struct使用mongo-go-driver的更新功能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用struct使用mongo-go-driver的更新功能相关的知识,希望对你有一定的参考价值。

可以像这样调用mongo-go-driver的更新功能。

filter := bson.D"username", username
update := bson.D"$set",
    bson.D
        "name", person.Name,
    ,

result, err := collection.UpdateOne(ctx, filter, update)
type Person struct 
    ID       primitive.ObjectID `json:"_id,omitempty" bson:"_id,omitempty"`
    Username string             `json:"username,omitempty" bson:"username,omitempty"`
    Name     string             `json:"name,omitempty" bson:"name,omitempty"`

但是,我需要使用person结构调用更新函数,而不是像这样提及person结构的每个字段。

filter := bson.D"username", username
update := bson.D"$set", <<how to convert person struct to bson document?>>
result, err := collection.UpdateOne(ctx, filter, update)

如何将person结构转换为bson文档?

答案

将人员结构编组到bson怎么样?

package main

import (
        "fmt"

        "labix.org/v2/mgo/bson"
)

type person struct 
        ID       string `json:"_id,omitempty" bson:"_id,omitempty"`
        Username string `json:"username,omitempty" bson:"username,omitempty"`
        Name     string `json:"name,omitempty" bson:"name,omitempty"`


func main() 
        p := person
                ID:       "id",
                Username: "uname",
                Name:     "name",
        
        var (
                bm  []byte
                err error
        )
        if bm, err = bson.Marshal(p); err != nil 
                panic(fmt.Errorf("can't marshal:%s", err))
        
        update := bson.D"$set", bm
        fmt.Printf("update is:%q\n", update)

跑:

 ./sobson
update is:["$set" "4\x00\x00\x00\x02_id\x00\x03\x00\x00\x00id\x00\x02username\x00\x06\x00\x00\x00uname\x00\x02name\x00\x05\x00\x00\x00name\x00\x00"]

以上是关于如何使用struct使用mongo-go-driver的更新功能的主要内容,如果未能解决你的问题,请参考以下文章

在官方mongo-go-driver的UpdateOne中$ set的bson语法是什么

go语言操作mongodb

在 Bigquery 中,如何使用标准 Sql 过滤 Struct 数组以匹配 Struct 中的多个字段?

Matlab如何获得struct内元素的个数?

内核如何使用task_struct?

如何通过 Modbus TCP 使用“struct.pack”类型发送?