如何在一个请求中在 Mongoose 中创建多个文档
Posted
技术标签:
【中文标题】如何在一个请求中在 Mongoose 中创建多个文档【英文标题】:How to create multiple documents in Mongoose in one request 【发布时间】:2019-02-28 16:39:51 【问题描述】:如何在 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() 运行之前运行手动验证吗?任何指导/建议将不胜感激!
【问题讨论】:
【参考方案1】:这里有交易问题。您正在尝试写入两个不同的模型,但希望整个操作是原子的,如果其中任何一个失败,您需要回滚。在 mongo 4.0 之前,mongo 不支持事务,解决这些排序问题的方法是 two phased commits。现在在 mongo 4.0 中,我们有 transactions 来解决这些问题。
希望对您有所帮助。
【讨论】:
交易似乎正是我想要的。感谢您的提示,没有意识到这存在。 乐于助人!以上是关于如何在一个请求中在 Mongoose 中创建多个文档的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Mongoose 在 AngularJS 中创建 PUT 函数
在 for 循环中在 django admin 中创建另一个模型对象
如何在 swift 中在动态 TableView 中创建动态 tableView?