如何在Node / Mongoose / Express的一个REST API请求中创建具有不同架构的多个文档?
例如,我需要根据一个请求创建一个用户和一个站点,例如/createUser
。
我当然可以创建一个用户,然后在返回的Promise中创建下一条记录,但是如果第二条记录不符合验证该怎么办?然后,我创建了一个没有第二条记录的用户。
User.create(userData)
.then(user => {
Site.create(siteData)
.then(site => {
// Do something
})
.catch(err => {
console.log(err)
// If this fails, I'm left with a user created without
// a site.
})
})
.catch(err => {
console.log(err)
})
在创建多个这样的文档时,是否有遵循的好习惯?我应该在每个.create()运行之前运行手动验证吗?任何指导/建议将不胜感激!
答案 0 :(得分:1)
您在这里遇到交易问题。您试图写入两个不同的模型,但希望整个操作是原子的,如果其中任何一个失败,则需要回滚。直到mongo不支持mongo 4.0事务为止,two phased commits是解决这些排序问题的方法。现在在mongo 4.0中,我们有了transactions来解决这些问题。
希望有帮助。