如何在一个请求中在 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 中创建多个文档的主要内容,如果未能解决你的问题,请参考以下文章