亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

關于 golang mongo-driver watch 功能遇到的一個坑

標簽:
MongoDB Go

这两天在写一个功能, 使用的是mongodb, 主语言是golang, 库是mongo-driver 其中有个需求,当时数据库的某个字段发生改变的时候,要能watch (监控) 到.  这里先上一下 可以触发watch的代码:(由于编码里没有使用golang的格式,所以下边代码很乱)

func (m *Mongo) Watch(table, operation string, fields []string) (db.Cursor, error) {    coll, err := m.collection(table)    if err != nil {        return nil, err    }    ctx, _ := context.WithTimeout(context.Background(), m.cfg.Timeout)    match := bson.D{{"operationType", operation}}    if len(fields) > 0 {        or := bson.A{}        for _, field := range fields {            or = append(or, bson.D{{                "updateDescription.updatedFields." + field,                bson.D{{"$exists", true}}}})        }        match = append(match, bson.E{"$or", or})    }    stream, err := coll.Watch(ctx, mongo.Pipeline{{{"$match", match}}},        options.ChangeStream().SetFullDocument(options.UpdateLookup))    if err != nil {        return nil, err    }    return &Cursor{ChangeStream: stream}, nil}

我大概介绍一下这个功能:

  先说参数 table 是具体的表名, operation 是触发的方式 比如 update delete insert, fields里是具体当前这个表里要触发的字段,比如有个name字段被update了,所以就要触发watch. 所以语句代码也是围绕这个来说的, 里边的$or 是代表任意一个字段发生变更都会触发, 如果必须全部字段 可以用 $and. 

  好了 前沿说了很多了,来说说我遇到的坑. 当我在业务代码中 进行 update 的时候, watch被很好的触发了, 但当我使用mongo的gui工具robot3的时候,竟然奇迹的发现,我的watch事件没有发生变更. 这使我很头疼, 百度了很久没有找到, 又去google了一段时间,也没有找到. 后来在朋友的帮助下,找到了答案: 如果是robot3 修改, 需要吧watch事件里的update替换成replace(当然 如果需要指定某些字段的话,还需要作微调,这里我就不细说了.) 总之 结论就是当使用gui 操作 mongo的时候, 我们使用watch 不能监听update, 而是replace. 不过一般来说我们都是在代码里操作,所以 update监听还是首选的,不过这里分享出这一经历.希望会对大家有所帮助


··································

欢迎关注课程:

《Django入门到进阶-更适合Python小白的系统课程》

  金职位 Python工程师2020版


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
Python工程師
手記
粉絲
233
獲贊與收藏
731

關注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消