如何在一个请求中在 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?

如何阻止在 Mongoose 数组中创建重复项 | NodeJS 猫鼬

如何在 iOS 编程中在 Swift 中创建实体文件?

如何在不在 MongoDB 中创建集合的情况下创建 Mongoose 模型?