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。

  • 相关阅读:
    P1486 [NOI2004]郁闷的出纳员
    P1966 火柴排队
    P2627 修剪草坪
    P1621 集合
    P1025 数的划分
    中国剩余定理
    P2043 质因子分解
    P1075 质因数分解
    C#之引用类型参数
    C#之方法的定义及调用学习案例
  • 原文地址:https://www.cnblogs.com/flipped/p/mongo-watch-specified-fields.html
Copyright © 2011-2022 走看看