mongoDB Golang Bson界面有一些问题吗?

时间:2018-05-09 08:08:18

标签: mongodb go bson mgo

我使用mgo(gopkg.in/mgo.v2)软件包使用MongoDB v3.6.4

Bson

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 但不同的参数类型得到不同的结果

为什么???

1 个答案:

答案 0 :(得分:0)

你正在放一个不必要的&在bson.M {...

前面
err := session.DB.C("user").FindId(id).One(&m)

在查找中使用bson.M也是不必要的,mgo专门针对您正在进行的搜索调用FindId。

{{1}}

gopkg.in/mgo.v2现在标记为未维护。 github.com/globalsign/mgo和github.com/globalsign/mgo/bson是两个维护的分叉库。我发现使用它们没有问题,而不是pf gopkg.in