加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在golang中无法通过ObjectId获取mongodb记录

发布时间:2020-12-16 09:29:14 所属栏目:大数据 来源:网络整理
导读:我试图通过使用以下代码获取ObjectId的 mongodb记录,但是err.Error()一直找不到它 以下是我的mongo收集样本 { "_id" : ObjectId("5a2a75f777e864d018131a59"),"callDate" : "22/12/2017","time" : "16.25","callType" : "a","position" : "aaa","description
我试图通过使用以下代码获取ObjectId的 mongodb记录,但是err.Error()一直找不到它

以下是我的mongo收集样本

{ "_id" : ObjectId("5a2a75f777e864d018131a59"),"callDate" : "22/12/2017","time" : "16.25","callType" : "a","position" : "aaa","description" : "aaaaaa","qty" : 2,"estimatedDuration" : 2.3,"estimatedOvertime" : 3.44,"rate" : 4,"laborExtension" : 3 }
{ "_id" : ObjectId("5a2a75f877e864d018131a5b"),"laborExtension" : 3 }
{ "_id" : ObjectId("5a2a75fa77e864d018131a5d"),"laborExtension" : 3 }

以下是我的模特

type RhinoJobs struct { 
ID                bson.ObjectId  `db:"id" json:"id" bson:"_id"` 
CallDate          string  `db:"call_date" json:"callDate" bson:"callDate"` 
Time              string  `db:"time" json:"time" bson:"time"` 
CallType          string  `db:"call_type" json:"callType" bson:"callType"` 
Position          string  `db:"position" json:"position" bson:"position"` 
Description       string  `db:"description" json:"description" bson:"description"` 
Qty               int     `db:"qty" json:"qty" bson:"qty"` 
EstimatedDuration float64 `db:"estimated_duration" json:"estimatedDuration" bson:"estimatedDuration"` 
EstimatedOvertime float64 `db:"estimated_overtime" json:"estimatedOvertime" bson:"estimatedOvertime"` 
Rate              float64 `db:"rate" json:"rate" bson:"rate"` 
LaborExtension    float64 `db:"labor_extension" json:"laborExtension" bson:"laborExtension"` 
}

我想通过对象id搜索这些记录

"gopkg.in/mgo.v2"

func GetMongoSession() (*mgo.Session,error) {
    if mgoSession == nil {
        var err error
        mgoSession,err = mgo.Dial(mongoConnectionUrl)
        if err != nil {
            return nil,err
        }
    }
    return mgoSession.Clone(),nil
}



func GetJobByID(objID string) (models.RhinoJobs,error) {
    var job models.RhinoJobs
    s,err := commons.GetMongoSession()
    if err != nil {
        errMsg := "error occurred while creating mongoDB connection stack:" + err.Error()
        print(err.Error())
        return job,errors.New(errMsg)
    }
    defer s.Close()
    err = s.DB("rhino").C("jobs").FindId(bson.ObjectIdHex("5a2a75f777e864d018131a59")).One(&job)
    if err != nil {
        print(err.Error())
        errMsg := "error occurred while getting data :" + err.Error()
        return job,errors.New(errMsg)
    }
    return job,nil
}

但是当我尝试通过以下代码获取所有收集记录时,它工作正常

err := s.DB("rhino").C("jobs").Find(nil).All(&jobs)

enter image description here

我也检查了SO Q& A但是没有用

Querying mongodb from golang using the _id stored in an array

How to find by id in golang and mongodb

Cannot retrieve “_id” value using mgo with golang

解决方法

我有完全相同的问题,我的问题是我最近切换到新的mgo fork(正在积极开发),我混合了依赖项.

我基本上使用了来自globalsign TOGETHER的mgo和来自gopkg.in的旧bson.请检查您的依赖项!

"github.com/globalsign/mgo"
"gopkg.in/mgo.v2/bson"

这是错误的!!

相反它应该是:

"github.com/globalsign/mgo"
"github.com/globalsign/mgo/bson"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读