2

我收藏的物品:

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"
}

这会抛出“未找到”,我不知道为什么。

4

1 回答 1

2

根据包的不同,字段的不同键值标签应该reflect用空格分隔。

按照惯例,标签字符串是可选用空格分隔的键:“值”对的串联。每个键都是一个非空字符串,由除空格 (U+0020 ' ')、引号 (U+0022 '"') 和冒号 (U+003A ':') 以外的非控制字符组成。每个值都被引用使用 U+0022 '"' 字符和 Go 字符串文字语法。

mgo无法读取标签并将 Id 值存储为id而不是_id.

于 2013-08-07T14:17:58.820 回答