当一次create()调用变成两次写入:Mongo + Mongoose的陷阱 😨

当一次create()调用变成两次写入:Mongo + Mongoose的陷阱 😨

💡 原文英文,约600词,阅读约需2分钟。
📝

内容提要

在使用Mongoose的create()方法时,可能会错误地插入两个文档,因为options被误认为是第二个文档。解决方法是使用new Model()和.save(),以确保只插入一个文档并正确处理options。

🎯

关键要点

  • 使用Mongoose的create()方法时,可能会错误地插入两个文档,因为options被误认为是第二个文档。

  • Mongoose的Model.create()方法没有options参数,错误使用时会导致插入两个文档。

  • 可以通过启用Mongoose调试模式来确认是否插入了两个文档。

  • 常见的解决方法是将文档放入数组中,但这会导致返回一个文档数组而不是单个文档。

  • 理想的解决方案是使用new Model()和.save()方法,这样可以确保只插入一个文档并正确处理options。

  • 使用.save()方法可以避免意外插入空的第二个文档,并且总是返回一个文档。

  • 了解方法签名的区别,Model.create()与Model.insertMany()处理options的方式不同。

  • 使用.save()方法进行单次插入,保留insertMany()用于批量插入。

  • 启用调试模式可以帮助快速定位方法签名不匹配的问题。

延伸问答

为什么使用Mongoose的create()方法会导致插入两个文档?

因为在create()方法中,options被误认为是第二个文档,导致插入两个文档。

如何确认Mongoose是否插入了两个文档?

可以通过启用Mongoose的调试模式,使用mongoose.set('debug', true)来确认。

使用Mongoose时,如何避免意外插入空的第二个文档?

可以使用new Model()和.save()方法,这样可以确保只插入一个文档并正确处理options。

Mongoose的.create()和.insertMany()方法有什么区别?

Model.create()没有options参数,而Model.insertMany()可以处理options,二者的处理方式不同。

使用.save()方法有什么好处?

使用.save()方法可以避免意外插入空的第二个文档,并且总是返回一个文档。

在Mongoose中,如何处理批量插入?

可以使用insertMany()方法来处理批量插入,适用于需要创建多个文档的情况。

➡️

继续阅读