Mongoose 中 insertOne 和 create 的区别
在 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,转载请注明出处