_id部材で型マッピングを適用するには、もはやのObjectId型にマップされていない。そのタイプのみbson.ObjectIdから誘導されたときのMgO
import (
"gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
)
type CustomId bson.ObjectId
type Foo struct {
ID1 CustomId `bson:"_id"` // broken
ID2 bson.ObjectId // mapped as expected
}
func main() {
session, _ := mgo.Dial("127.0.0.1")
coll := session.DB("mgodemo").C("foocoll")
doc := Foo{
CustomId(bson.NewObjectId()),
bson.NewObjectId(),
}
coll.Insert(doc)
}
_idはMongoの中のObjectIdされているべきです。 しかし、それは文字列を選びだしたことが判明:
モンゴシェル:
> db.foocoll.findOne()
{ "_id" : "XvMn]K� �\f:�", "id2" : ObjectId("58764d6e5d4be120fa0c3ab1") } // id2 is OK ...
> typeof db.foocoll.findOne()._id
string // OOps. Should be ObjectId !
をbson.ObjectId自体が文字列から派生しているので、これは、意図することができます。しかし、ここでは、私たちにとっては悪いことです。
データベース内のObjectIdに_idをマップするようmgoに指示できますか?
ニース。コンパイル可能に編集されています。 – icza