мангуст вызывает .find внутри хука pre ('save') - PullRequest
0 голосов
/ 07 июня 2018

В настоящее время я пытаюсь сделать следующее:

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 не является функцией

Как вызвать метод .find () в моем промежуточном программном обеспечении («сохранить»)?(Я знаю, что в Schmemas есть уникальное свойство. Я должен сделать это так, чтобы суффикс строки имени, если она уже существует)

версия mongoose: 5.1.3 версия nodejs: 8.1.1 система:Ubuntu 16.04

1 Ответ

0 голосов
/ 07 июня 2018

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.reject.

...