GoLang 中用 MongoDB Watch 監聽指定字段的變化


需要 MongoDB 3.6 及以上, 需要 ReplicaSet 模式。
監聽一個字段的變化:

例如監聽字段 name:

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))
}

監聽兩個字段的變化:

例如監聽字段 nameage:

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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM