MongoDB 更改流:我可以在更新/删除之前获取值吗?

问题描述 投票:0回答:3

更新操作上的更改流事件仅返回更改的文档,与 oplog 相同。我可以在更新之前获取文档(或一些更新的值)吗?

MySQL 基于行的 binlog 可以使用 full binlog_row_image 来完成此操作。

mongodb mysqlbinlog changestream mongodb-oplog
3个回答
6
投票

不,从变更流来看,更新事件看起来像:

{
   _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 中您会同时获得之后和之前的值。


0
投票

2024 :我不知道这以前是否不可能,但目前它由 { fullDocument: 'updateLookup' } 选项支持。

const collection = db.collection('inventory');
const changeStream = collection.watch([], { fullDocument: 'updateLookup' });
changeStream.on('change', next => {
  // process next document
});

MongoDB 文档:查找更新操作的完整文档


-1
投票

在 findAndModify 命令中,您可以选择(新:真/假)是否返回文档的新版本(真)或原始版本(假,这是默认值)

© www.soinside.com 2019 - 2024. All rights reserved.