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パッケージに応じて、フィールドのさまざまなキーと値のタグは、スペースで区切る必要があります。

慣例により、タグ文字列は、オプションでスペースで区切られた key:"value" ペアの連結です。各キーは、スペース (U+0020 ' ')、引用符 (U+0022 '"')、およびコロン (U+003A ':') 以外の非制御文字で構成される空でない文字列です。各値は引用符で囲まれています。 U+0022 '"' 文字と Go 文字列リテラル構文を使用します。

パッケージはタグのmgo読み取りに失敗し、Id 値をidではなくとして保存します_id

于 2013-08-07T14:17:58.820 に答える