首页  编辑  

Nestjs中Mongodb的回调函数

Tags: /Node & JS/   Date Created:
在 NestJS 中,当你使用 Mongoose(一个 MongoDB 的 Node.js ODM 库)时,Mongoose 提供了许多预定义的钩子(hooks)方法,这些方法允许你在文档的生命周期中的特定阶段执行自定义逻辑。这些钩子在文档保存(save)或更新(通常也是通过 save 或其他 Mongoose 更新方法如 findOneAndUpdate)之前和之后被调用。
对于 Mongoose 来说,以下是一些可用的钩子:
  • pre('save'): 在文档保存到数据库之前执行。
  • post('save'): 在文档保存到数据库之后执行。
  • pre('validate'): 在文档验证之前执行(在 save 过程中)。
  • post('validate'): 在文档验证之后执行(在 save 过程中)。
  • pre('updateOne'), pre('updateMany'), pre('replaceOne'): 在更新操作之前执行。
  • post('updateOne'), post('updateMany'), post('replaceOne'): 在更新操作之后执行。
  • pre('findOneAndUpdate'), pre('findOneAndReplace'), pre('findOneAndDelete'): 在查询和更新/替换/删除操作之前执行。
  • post('findOneAndUpdate'), post('findOneAndReplace'), post('findOneAndDelete'): 在查询和更新/替换/删除操作之后执行。

示例

使用 pre('save'): 在文档保存到数据库之前自动执行一些业务。
比如自动给一些id添加唯一值。处理一些业务逻辑等等。
import { Schema, model, Document } from 'mongoose';  
  
export interface MyDocument extends Document {  
  // 定义你的字段  
  name: string; 
  id: string;
  // ...  
}  
  
const MyDocumentSchema = new Schema({  
  name: String,  
  // ...  
}, {  
  // 可以在这里添加其他 Schema 选项  
});  
  
// 定义 pre('save') 钩子  
MyDocumentSchema.pre('save', function(next) {  
  // 在这里添加你的逻辑  
  // 例如,修改某个字段的值或进行其他验证  
  console.log('Document will be saved!'); 
  //比如我给一个唯一id自动赋值
  this['_doc'].id = this._id.toString()
  next(); // 调用 next() 以继续执行保存操作  
});   
  
// 编译模型  
export const MyDocumentModel = model<MyDocument>('MyDocument', MyDocumentSchema);
post('save'): 在文档保存到数据库之后执行。
在数据库保存之后执行某些动作:
import { Schema, model, Document } from 'mongoose';  
  
export interface MyDocument extends Document {  
  // 定义你的字段  
  name: string;  
  // ...  
}  
  
const MyDocumentSchema = new Schema({  
  name: String,  
  // ...  
}, {  
  // 可以在这里添加其他 Schema 选项  
});  
​
  
// 定义 post('save') 钩子  
MyDocumentSchema.post('save', function(doc) {  
  // 在这里添加你的逻辑  
  // 例如,发送通知或记录日志  
  console.log('Document has been saved!');  
});  
  
// 编译模型  
export const MyDocumentModel = model<MyDocument>('MyDocument', MyDocumentSchema);