членом _id не отображаются на тип ObjectId больше, когда его тип только получен из bson.ObjectId:Enforce отображения типа с МдО
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 должен был в Монго ObjectId. Но оказывается, что строка была выбрана:
Монго Shell:
> 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 сам является производным от строки. Но здесь это плохо для нас.
Можем ли мы сказать mgo, чтобы сопоставить _id с ObjectId в базе данных?
Ницца. Отредактировано, чтобы сделать его компилируемым. – icza