Интерфейс mongoDB Golang Bson имеет некоторые проблемы? - PullRequest
0 голосов
/ 09 мая 2018

Я использую MongoDB v3.6.4 с пакетом 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 но другой тип параметра дает разный результат

почему ???

1 Ответ

0 голосов
/ 09 мая 2018

Вы ставите ненужное & перед 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

...