我正在使用 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
)我知道我的示例很难让您理解,但我尝试选择一个最简单的示例,而不是复制完全相同的代码,否则会困难得多
sess
,就像使用
updateMany({filterCriteria}, {updateCriteria}, ..., {session})
将其包含在交易中一样。在你的例子中,它会是这样的
save({session})