I uesd MongoDB v3.6.4 with mgo(gopkg.in/mgo.v2( 包
布森
var id interface{}
id = 249678041972736
bson.M{"_id": id}
var id int64
id = 249678041972736
bson.M{"_id": id}
拖车布森不一样吗?
例如:
func GetUser(id interface{}) (*User, error) {
session := MongoDB()
defer session.Close()
var m *User
err := session.DB.C("user").Find(&bson.M{"_id": id}).One(&m)
// !!!err: not found
if err != nil {
return nil, err
} else {
return m, nil
}
}
但:
func GetUser(id int64) (*User, error) {
session := MongoDB()
defer session.Close()
var m *User
err := session.DB.C("user").Find(&bson.M{"_id": id}).One(&m)
// !!! err == nil
if err != nil {
return nil, err
} else {
return m, nil
}
}
GetUser(id interface{}) can get err (not found)
GetUser(id int64) can get nil err
注意错误
我使用了函数 GetUser 并导入相同的值249678041972736 但不同的参数类型得到不同的结果
为什么?
你在 bson 前面放了一个不必要的 &。M{...
err := session.DB.C("user").Find(bson.M{"_id": id}).One(&m)
bson的使用。查找中的M也是不必要的,mgo专门为您正在执行的搜索调用了FindId。
err := session.DB.C("user").FindId(id).One(&m)
gopkg.in/mgo.v2 现在被标记为未维护。 github.com/globalsign/mgo 和 github.com/globalsign/mgo/bson 是两个维护的分支库。我发现使用它们代替 pf 没有问题 gopkg.in