gpt4 book ai didi

node.js - Mongoose 调用 .find inside a pre ('save' ) hook

转载 作者:搜寻专家 更新时间:2023-11-01 00:36:18 26 4
gpt4 key购买 nike

目前我正在尝试执行以下操作:

const ItemSchema = mongoose.Schema({
...
name : String
...
});

ItemSchema.pre('save', async function() {
try{
let count = await ItemSchema.find({name : item.name}).count().exec();
....
return Promise.resolve();
}catch(err){
return Promise.reject(err)
}
});

module.exports = mongoose.model('Item', ItemSchema);

但我只是得到以下错误:

TypeError: ItemSchema.find is not a function

如何在我的 post('save') 中间件中调用 .find() 方法? (我知道,在 Schmemas 上有一个独特的属性。如果它已经存在,我必须这样做来为名称字符串添加后缀)

Mongoose 版本:5.1.3 Node 版本:8.1.1系统:ubuntu 16.04

最佳答案

find 静态方法在模型上可用,而 ItemSchema 是模式。

它应该是:

ItemSchema.pre('save', async function() {
try{
let count = await Item.find({name : item.name}).count().exec();
....
}catch(err){
throw err;
}
});

const Item = mongoose.model('Item', ItemSchema);
module.exports = Item;

或者:

ItemSchema.pre('save', async function() {
try{
const Item = this.constructor;
let count = await Item.find({name : item.name}).count().exec();
....
}catch(err){
throw err;
}
});

module.exports = mongoose.model('Item', ItemSchema);

注意 Promise.resolve()async 函数中是多余的,它已经在成功的情况下返回已解决的 promise ,Promise.reject.

关于node.js - Mongoose 调用 .find inside a pre ('save' ) hook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50740145/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com