从golang中的mongodb中提取数据的正确方法



我在mongodb中有一个这样格式的文档,

{
field1: string,
field2: float64,
field3: {...float64}
}

最终,我想总是得到field1&field2和从field3对象中拾取/选择。

为了做到这一点,我将数据解码成这样的结构,

type MongoScore struct {
field1          string              `json:"field1"`
field2          float64             `json:"field2"`
field3          map[string]float64  `json:"field3"`
}

我想知道的是,是否有更有效的方法来提取不同类型的数据。

假设您有以下数据结构:

type Product struct {
ID          primitive.ObjectID `bson:"_id"`
Title       string             `bson:"product"`
Description string             `bson:"description"`
count int64 // <- this is not exported, so data won't be filled
}

在Golang中,只有导出的字段或方法才能从包外访问。

使用struct-field标记告诉Mongodb将数据从集合直接加载到匹配的字段。这里mongodb将bson标记与集合中的字段进行匹配。

func main() {
ctx, _ := context.WithTimeout(context.Background(), 5*time.Second)
client, err = mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017/"))
if err != nil {
log.Fatalf("can't connect to database: %vn", err)
}

objID, _ := primitive.ObjectIDFromHex("619dd79acad38082f9ce16af")

db := client.Database("db")
col := db.Collection("products")

filter := bson.D{
{"_id", objID},
}

dest := &Project{}

err := col.FindOne(ctx, filter).Decode(dest)
if err != nil {
log.Fatalln(err)
}

方法Decode将找到的数据解组为dest

最新更新