我收藏的对象:
type Room struct {
Id bson.ObjectId `json:"Id" bson:"_id"`
Name string `json:"Name" bson:"name"`
}
插入集合:
room = &Room{Id: bson.NewObjectId(), Name: "test"}
RoomCollection.Insert(room)
从集合中检索(任何):
roomX := &Room{}
if err := RoomCollection.Find(bson.M{}).One(roomX); err != nil {
panic(err)
}
fmt.Printf("RoomX %s:\n%+v\n\n", roomX.Id, roomX)
输出:
RoomX ObjectIdHex("52024f457a7ea6334d000001"):
&{Id:ObjectIdHex("52024f457a7ea6334d000001") Name:test}
从集合中检索(按ID):
roomZ := &Room{}
if err := RoomCollection.Find(bson.M{"_id": room.Id}).One(roomZ); err != nil {
panic(err) // throws "not found"
}
这引发“未找到”,我无法弄清楚原因。
答案 0 :(得分:2)
根据reflect
包,字段的不同键值标签应使用空格分隔。
按照惯例,标记字符串是可选的以空格分隔的键的串联:" value"对。每个键都是一个非空字符串,由空格以外的非控制字符组成(U + 0020''),引用(U + 0022'"'),和冒号(U + 003A':')。每个值都使用U + 0022'"'字符和Go字符串文字语法。
mgo
包无法读取代码并将ID值存储为id
而不是_id
。