如何在一个请求中在Mongoose中创建多个文档

时间:2018-09-25 06:13:07

标签: node.js rest express mongoose api-design

如何在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 个答案:

答案 0 :(得分:1)

您在这里遇到交易问题。您试图写入两个不同的模型,但希望整个操作是原子的,如果其中任何一个失败,则需要回滚。直到mongo不支持mongo 4.0事务为止,two phased commits是解决这些排序问题的方法。现在在mongo 4.0中,我们有了transactions来解决这些问题。

希望有帮助。