mongoose model.update不工作

时间:2018-01-15 20:53:50

标签: node.js mongodb mongoose middleware

以前曾经工作过。我不知道改变了什么...... 这是方法:

用户拥有一组团队。删除A Team后,我希望从用户的Team数组中删除RefID

TeamSchema.pre('remove', function(next) {
  const team = this;
  User.update( { teams: { $in: [team._id] } }, { $pull: { teams: team._id } }, next);
});

收到此错误:

  

(node:7484)UnhandledPromiseRejectionWarning:未处理的promise promise(拒绝ID:1):TypeError:User.update不是函数

此外,其他方法都不起作用(Model.findById, Model.find等...),尽管我的模型和mongoose都是在文件顶部导入的。

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const User = require('./user');

我的mongoose操作中没有一个在Model.pre()函数内工作。

我有另一个pre方法的文件,其中Model.find函数有效:

UserSchema.pre('remove', function(next) {
  const user = this;
  Team.find({ admin: { $in: [user._id] } }, function(err, teams) {
    if (err) {
      return next(err);
    }
    teams.forEach(function(t) {  t.remove(); });
    next
  });
});

是否有人熟悉此问题?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用mongoose.models[modelName]代替直接型号名称。像贝娄一样

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

var UserSchema = new Schema({
     // .....
    })

UserSchema.pre('remove', function(next) {
  const user = this;
  mongoose.models['Team'].find({ admin: { $in: [user._id] } }, function(err, teams) {
    if (err) {
      return next(err);
    }
    teams.forEach(function(t) {  t.remove(); });
    next();
  });
});
应使用名称Team导出

团队模型。像:

module.exports = mongoose.model('Team', TeamSchema);