// 在test库的test集合上创建一个名为watchCursor 的change stream 游标
watchCursor = db.getSiblingDB("test").test.watch();
// 对游标watchCursor进行循环迭代(其中当游标关闭或游标迭代没有文档时isExhausted()返回true)
while (!watchCursor.isExhausted()){
if (watchCursor.hasNext()){
a=watchCursor.next();
printjson(a);
}
}
// 开启另一个会话在test库下的test集合执行update操作
db.test.update({x:100},{$set:{age:80}},{upsert:true});
输出结果及详细说明如下:
{
"_id" : { // 表示更新操作的token 值(映射至对应操作的oplog)
"_data":BinData(0,"glsn32QAAAABRmRfaWQAZFsn3vA
7Q4yjQzA+1wBaEAQwkZh988FJS5yreqLRyy/wBA==")
},
"operationType" : "update", // 捕获的具体操作类型
// 输出更新后整个文档的详细信息
// 前提条件是在创建ChangeStream游标是指定了fullDocument : "updateLookup"
"fullDocument" : {
"_id" : ObjectId("5b27e2453b438ca343304236"),
"x" : 100,
"age" : 80,
"name" : "li"
},
"ns" : {
"db" : "test",// 对应的库名
"coll" : "test"// 对应的集合
},
"documentKey" : {
// 操作对应记录的_id,如果是分片集合此处还会输出对应的分片key
"_id" : ObjectId("5b27def03b438ca343303ed7")
},
"updateDescription" : { // 描述了操作后记录影响的具体增量信息
"updatedFields" : { // 增量操作(这里是update)所影响的字段
"age" : 80 // 增量操作(这里是更新后)具体字段的值
},
"removedFields" : [ ] //该字段描述了update操作后被删除的字段信息
}
}