更新操作上的更改流事件仅返回更改的文档,与 oplog 相同。我可以在更新之前获取文档(或一些更新的值)吗?
MySQL 基于行的 binlog 可以使用 full binlog_row_image 来完成此操作。
不,从变更流来看,更新事件看起来像:
{
_id: { < Resume Token > },
operationType: 'update',
clusterTime: <Timestamp>,
ns: {
db: 'engineering',
coll: 'users'
},
documentKey: {
_id: ObjectId("58a4eb4a30c75625e00d2820")
},
updateDescription: {
updatedFields: {
email: '[email protected]'
},
removedFields: ['phoneNumber']
}
}
仅显示新值,与 MySQL 不同,在 MySQL 中您会同时获得之后和之前的值。
2024 :我不知道这以前是否不可能,但目前它由 { fullDocument: 'updateLookup' } 选项支持。
const collection = db.collection('inventory');
const changeStream = collection.watch([], { fullDocument: 'updateLookup' });
changeStream.on('change', next => {
// process next document
});
在 findAndModify 命令中,您可以选择(新:真/假)是否返回文档的新版本(真)或原始版本(假,这是默认值)