在 Model.findOneAndUpdate 中使用事务

flo*_*nkt 2 transactions mongoose

如何在猫鼬中使用 Model.findOneAndUpdate() 进行事务?

我有一个会话对象,我想将 findOneAndUpdate 操作作为事务的一部分提交,但不知道如何传递我的会话对象。

const session = params?.mongoose?.session;

const doc = await this.Model.findOneAndUpdate(
  { sequence: sequence },
  {
    $setOnInsert: { sequenceLength: sequenceLength },
    $inc: { value: 1 }
  },
  { upsert: true, new: true }
);
Run Code Online (Sandbox Code Playgroud)

flo*_*nkt 5

该问题是 TypeScritp 问题。类型定义不完整,QueryFindOneAndUpdateOptions接口应包括session?: ClientSession;

我在这里提出了一个问题:https ://github.com/Automattic/mongoose/issues/8396

基本上,您必须简单地将会话作为参数传递,但目前这会引发 ts 错误。

const session = params?.mongoose?.session;

const doc = await this.Model.findOneAndUpdate(
  { sequence: sequence },
  {
    $setOnInsert: { sequenceLength: sequenceLength },
    $inc: { value: 1 }
  },
  { upsert: true, new: true, session: session }
);
Run Code Online (Sandbox Code Playgroud)