mongodb4.0事务

发布于 2022-09-11 20:55:20 字数 1294 浏览 13 评论 0

在mongodb副本集中开启了事务 进行了两次写入插入操作,一次写入操作会成功,一次写入操作会失败,为什么数据依然会插入到数据库?
async insertStore() {

const { ctx } = this;
const query = ctx.request.body;
// Start a session.
const session = await this.ctx.app.mongoose.startSession({
  readPreference: { mode: 'primary' },
});
 // Start a transaction
  await session.startTransaction({
    readConcern: { level: 'snapshot' },
    writeConcern: { w: 'majority' },
  });
// Operations inside the transaction
try {

  await ctx.service.store.insertStore(query);
  const userRes = await this.findUser({ token: this.ctx.headers.token });
  const updateRes = await this.updateUser(
    { id: userRes[0].id },
    { $set: { store: 4343 } }
  );
  await session.commitTransaction();
} catch (err) {
  await session.abortTransaction();
  throw err;
} finally {
  await session.endSession();
}

}
mongoose配置 MongoDB shell version v4.0.10 mongoose v:5.6.x
mongoose: {

  client: {
    url: 'mongodb://127.0.0.1:27013,127.0.0.1:27012,127.0.0.1:27011/mall',
    options: {
      autoIndex: false,
      replicaSet: 'rs0',
      readPreference: 'secondary',
      w: 'majority',
    },
    // mongoose global plugins, expected a function or an array of function and options
    plugins: [],
  },
},

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

爱你不解释 2022-09-18 20:55:20

加上配置项
const updateRes = await this.updateUser(

{ id: userRes[0].id },
{ $set: { store: 4343 } ,{session}}

);

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文