如何将 mongoose 事务与 updateMany 一起使用?

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

我正在使用 mongoose

updateMany()
方法,我也想将其保留为事务的一部分。该文档显示了
save()
的示例,我可以在其中执行类似
Model.save({session: mySession})
的操作,但并不真正知道如何使用它,例如
Model.updateMany()

更新: 例如,我有两个名为

SubDomain
Service
的模型,它们分别如下所示:

子域

{
  name: {
    type: String,
    required: true,
  },
  url: {
    type: String,
    required: true,
    unique: true,
  },
  services: [
    {
      type: mongoose.Schema.Types.ObjectId,
      ref: "Service",
    },
  ],
  user: {
    type: mongoose.Schema.Types.ObjectId,
    ref: "User",
  },
}

服务:

{
  name: {
    type: String,
    required: true,
  },
  description: {
    type: String,
    required: true,
  },
  price: { type: Number },
  tags: { type: Array },
  packages: [
    {
      name: { type: String, required: true },
      description: { type: String, required: true },
      price: { type: Number, required: true },
    },
  ],
  map: { type: String },
  isHidden: {
    type: Boolean,
    required: true,
    default: false,
  },
  sortingOrder: { type: Number },
  isForDomain: { type: Boolean, required: false, default: false },
  isForSubDomain: { type: Boolean, required: false, default: false },
  subDomains: [
    {
      type: mongoose.Schema.Types.ObjectId,
      ref: "SubDomain",
    },
  ],
}

现在这里的主要字段是

services
中的
SubDomain
字段和
subDomains
中的
Service
字段。

复杂的部分😅: 每当用户想要创建新的

service
时,我想将
$push
service
放入该新
_id
 内所有 
services
subDomains
 数组中
为此,我使用

service

,如下所示:

updateMany()

问题就从这里开始,我当然可以:

const sess = await mongoose.startSession(); sess.startTransaction(); const newService = new Service({ _id: mongoose.Types.ObjectId(), subDomains: req.body.subDomains ...foo }) await SubDomain.updateMany( { _id: { $in: req.body.subDomains } }, { $push: { services: newService._id } } );

但是我如何将我的
newService.save({session: sess})

SubDomain
保持在同一个
updateMany
(即
transaction

我知道我的示例很难让您理解,但我尝试选择一个最简单的示例,而不是复制完全相同的代码,否则会困难得多

javascript node.js mongodb mongoose
1个回答
0
投票
sess

,就像使用

updateMany({filterCriteria}, {updateCriteria}, ..., {session})
将其包含在交易中一样。
在你的例子中,它会是这样的

save({session})

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