gpt4 book ai didi

mongodb - bson.M 构造

转载 作者:IT王子 更新时间:2023-10-29 00:53:48 26 4
gpt4 key购买 nike

我有一个相当奇怪的问题,我一直在努力思考并寻找一些关于最佳方法的建议。我正在使用 mgo 来过滤包含几种不同类型结构的集合,并试图在事后从 bson.M 转换为正确的结构。基本上,我希望能够过滤集合并查看每个结果,并基于转换为正确结构的公共(public)字段。

这是我尝试使用的结构示例。

  type Action interface {
MyFunc() bool
}

type Struct1 struct {
Id bson.ObjectId `bson:"_id,omitempty"`
Type string `bson:"type"`
Struct1Only string `bson:"struct1only"`
}

func (s Struct1) MyFunc() bool {
return true
}

type Struct2 struct {
Id bson.ObjectId `bson:"_id,omitempty"`
Type string `bson:"type"`
Struct2Only string `bson:"struct2only"`
}

func (s Struct2) MyFunc() bool {
return true
}

我最初的想法是做这样的事情:

var result bson.M{}
err := c.Find(bson.M{nil}).One(&result)

然后打开类型字段并转换为正确的结构,但老实说,我是 go 和 mongo 的新手,我确信有更好的方法可以做到这一点。有什么建议么?谢谢

最佳答案

您不必将 bson.M 转换为结构,而是直接将结构指针传递给 One 函数

var struct2 Struct2
err := c.Find(bson.M{nil}).One(&struct2)

如果您仍想将 bson.M 转换为结构,请使用 Marshal 和 Unmarshal

var m bson.M
var s Struct1

// convert m to s
bsonBytes, _ := bson.Marshal(m)
bson.Unmarshal(bsonBytes, &s)

关于mongodb - bson.M 构造,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36362457/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com