Mongoose 中 insertOne 和 create 的区别

创建时间.png 2024-12-26
标签.png tool
阅读量.png 2142

在 Mongoose 中,insertOne 和 create 都可以用于将文档插入到数据库中,但它们之间有一些显著的区别。


insertOne

insertOne 是由 MongoDB 驱动直接提供的一个方法,用于向集合插入单个文档。

特点

  • 直接调用 MongoDB 驱动:绕过 Mongoose 的模型层,直接与数据库交互。

  • 不执行 Mongoose 的中间件(middleware):如 pre 和 post 钩子。

  • 不进行 Schema 验证:仅确保插入的数据符合 MongoDB 的基本存储要求,而不会严格验证数据是否符合 Mongoose Schema。

  • 适合高性能插入:尤其是在需要大量插入数据时。

使用方式

const mongoose = require('mongoose');

await mongoose.connection.collection('tasks').insertOne({
  taskId: '735602426030',
  status: 'success',
  brand: 'xiaomi'
});
console.log('Document inserted!');

create

create 是 Mongoose 模型提供的一个方法,用于基于模型的 Schema 插入文档。

特点

  • 依赖 Mongoose 模型:需要使用模型进行调用。

  • 执行 Mongoose 中间件:会触发 pre 和 post 钩子。

  • 执行 Schema 验证:会根据 Schema 定义严格验证插入的数据,确保数据完整性。

  • 返回 Mongoose 文档对象:允许使用模型方法操作返回的数据。

使用方式

const Task = require('./models/Task');

await Task.create({
  taskId: '735602426030',
  status: 'success',
  brand: 'xiaomi',
  appName: '优道省电助手',
  sdkVersion: 'release-v2.1.2'
});
console.log('Document created!');

对比总结

特性 insertOne create
调用方式 直接调用 MongoDB 驱动 使用 Mongoose 模型
Schema 验证 不执行 执行严格验证
中间件支持 不支持 支持(pre 和 post 钩子)
性能 更高(绕过 Mongoose) 略低(验证和中间件增加开销)
返回类型 原始插入结果 Mongoose 文档对象
适用场景 高性能、简单插入 数据需符合 Schema 且用模型操作

选择建议

  • 使用 insertOne:

    • 数据已经经过外部验证,且不需要触发中间件。

    • 对性能要求较高,或需要直接操作 MongoDB 驱动。

  • 使用 create:

    • 希望利用 Mongoose 的 Schema 验证和中间件特性。

    • 插入数据后,需要使用模型提供的方法继续操作文档。

根据项目需求选择合适的方法能提高代码的可靠性和性能。

原文地址:https://webfem.com/post/mongoose-create,转载请注明出处

webfem 头像
webfem 博客