insertOne
如果成功应该返回Object
这样的
{
acknowledged: true,
insertId: <object OjectId> // or the _id you specified
}
updateOne
如果成功应该返回Object
这样的
{
acknowledged: true,
modifiedCount: 1, // or 0 if upserted
upsertedId: null, // or an <object OjectId>
upsertedCount: 0, // or 1 if upserted
matchedCount: 1 // or 0 if upserted
}
现在,updateOne
只更新与查询匹配的第一个文档。如果没有文档与查询匹配,它将简单地不更新文档并且不会抛出任何错误。如果发生这种情况,你会得到这样的对象,
{
acknowledged: true,
modifiedCount: 0,
upsertedId: null,
upsertedCount: 0,
matchedCount: 0
}
所以,在那种情况下,检查data.result.ok
不会告诉你任何事情。如果你想要这样的事情,你必须手动检查每个方法调用。在你的情况下,也许做这样的事情?
execTransaction(session => {
return async () => {
await Promise.all([
db.collection('table1').updateOne({ username: username }, { $push: { apps: client_id } }, { session }),
db.collection('table2').insertOne({ data: data }, { session })
])
};
}, data => {
if (data[0].matchedCount === 0) {
// do error handling ?
}
}
)
或者,如果您想知道所有 CRUD 操作是否如标题所示成功,也许是这个?
(await Promise.all([a list of all insertOne and updateOne operations... ])
.every(obj => obj && obj.acknowledged && (obj.insertId || obj.modifiedCount || obj.upsertedCount))
// this checks if all the properties are non zero
// thus if It's true, everything succeed
但我再次建议您在需要时为每个操作单独进行错误处理。