NestJS-Mongoose:无法在 ChangeEvent<any> 上访问 fullDocument

NestJS-Mongoose: cannot access fullDocument on ChangeEvent<any>

我有以下基本代码片段,我的目标是从 obj: ChangeEvent 获取完整文档 属性 但是我无法访问此 属性 (Property 'fullDocument' does not exist on type 'ChangeEvent<any>').我可以访问的唯一属性是 _id、clusterTime 和 operationType。有没有我遗漏的东西,或者我应该非直接查询 fullDocument (obj['fullDocument'])?

const changeStream = this.model.watch([], { fullDocument: 'updateLookup' })
      .on('change', obj => {
        console.log(obj.fullDocument);
      });

您遇到的问题(TypeScript 抱怨缺少 属性)是由于 unspecialized return type generic mongodb.ChangeStream in mongoose's Model.watch method (in both @types/mongoose and official mongoose types ,我假设您使用的是 mongoose 5.x 分支)。

例如 @types/mongodb 正确包装 declares/specializes watch 方法上的 return 类型。

真正的解决方案是创建一个 Pull Request,修复上述包存储库中 watch return 类型的 return 类型,and/or 报告问题给维护者。为了快速 'fix' 你可以像这样求助于类型转换(对于最干净的 changeStream 形状,MySchema 应该是你用 @Schema 注释的 class ):

const changeStream = this.model
  .watch([], { fullDocument: 'updateLookup' }) as ChangeStream<MySchema>; // <-- specialize using the cast
      
changeStream.on('change', obj => {
  console.log(obj.fullDocument);
});

另请注意,MongoDB Change Stream 需要副本集或分片集群。