如何在一个请求中在 Mongoose 中创建多个文档
How to create multiple documents in Mongoose in one request
如何在 Node/Mongoose/Express 中的一个 REST API 请求中创建具有不同架构的多个文档?
例如,我需要在单个请求中创建一个用户和一个站点,例如 /createUser
。
我当然可以创建一个用户,然后在返回的承诺中创建下一条记录,但是如果第二条记录不符合验证怎么办?然后我创建了一个没有第二条记录的用户。
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() 运行 之前手动验证吗?任何 guidance/advice 将不胜感激!
您这里有交易问题。您正在尝试写入两个不同的模型,但希望整个操作是原子的,如果其中任何一个失败,您需要回滚。在 mongo 之前,mongo 不支持 4.0 事务,解决这些排序问题的方法是 two phased commits. Now in mongo 4.0 we have transactions 来解决此类问题。
希望对您有所帮助。
如何在 Node/Mongoose/Express 中的一个 REST API 请求中创建具有不同架构的多个文档?
例如,我需要在单个请求中创建一个用户和一个站点,例如 /createUser
。
我当然可以创建一个用户,然后在返回的承诺中创建下一条记录,但是如果第二条记录不符合验证怎么办?然后我创建了一个没有第二条记录的用户。
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() 运行 之前手动验证吗?任何 guidance/advice 将不胜感激!
您这里有交易问题。您正在尝试写入两个不同的模型,但希望整个操作是原子的,如果其中任何一个失败,您需要回滚。在 mongo 之前,mongo 不支持 4.0 事务,解决这些排序问题的方法是 two phased commits. Now in mongo 4.0 we have transactions 来解决此类问题。
希望对您有所帮助。