zoukankan      html  css  js  c++  java
  • GoLang 中用 MongoDB Watch 监听指定字段的变化

    需要 MongoDB 3.6 及以上, 需要 ReplicaSet 模式。
    监听一个字段的变化:

    func watch(coll *mongo.Collection) {
    	match := bson.D{{"operationType", "update"},
    		{"updateDescription.updatedFields.name", bson.D{{"$exists", true}}}}
    	coll.Watch(context.Background(), mongo.Pipeline{{{"$match", match}}},
    		options.ChangeStream().SetFullDocument(options.UpdateLookup))
    }
    

    监听两个字段的变化:

    func watch(coll *mongo.Collection) {
    	match := bson.D{
                    {"operationType", "update"},
    		{"$or", bson.A{
    			bson.D{{"updateDescription.updatedFields.name", 
                                    bson.D{{"$exists", true}},
                            }},
    			bson.D{{"updateDescription.updatedFields.age", 
                                    bson.D{{"$exists", true}},
                            }},
                    }}
    
    	coll.Watch(context.Background(), mongo.Pipeline{{{"$match", match}}},
    		options.ChangeStream().SetFullDocument(options.UpdateLookup))
    }
    

    任意一个变化,用$or ,都变化,用$and。注意 bson.A 里面是 bson.D

    坑:如果使用 Robo 3T 进行修改,operationType是 replace。

  • 相关阅读:
    第七组(69)团队展示
    结对编程作业
    同步异步和阻塞非阻塞
    TCP和UDP和IP和HTTP和socket
    http协议
    数据库基础知识
    准确的笑话
    Java实现多线程的方式
    HashMap
    HTTPS与HTTP
  • 原文地址:https://www.cnblogs.com/flipped/p/mongo-watch-specified-fields.html
Copyright © 2011-2022 走看看