的_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應該已經在蒙戈一個的ObjectId。 但事實證明,串是choosen:
蒙戈殼牌:
> 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