我收藏的元素:
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"
}
这会抛出“未找到”,我不明白为什么。
最佳答案
根据 reflect
包,字段的不同键值标记应以空格分隔。
By convention, tag strings are a concatenation of optionally space-separated key:"value" pairs. Each key is a non-empty string consisting of non-control characters other than space (U+0020 ' '), quote (U+0022 '"'), and colon (U+003A ':'). Each value is quoted using U+0022 '"' characters and Go string literal syntax.
mgo
包无法读取标签,并将 Id 值存储为 id
而不是 _id
。
关于mongodb - 通过id从集合中检索文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18105411/