我在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
。