我是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 }