引用对象ID在Mongoose 4.11.6中不起作用

时间:2017-08-12 18:21:08

标签: node.js mongodb mongoose

我有这个问题。基本上,我有2个模式 - 用户模式和文档模式。 Document架构的owner引用_id集合中的User文档字段。

问题在于,我仍然可以使用Document集合中不存在的所有者ID保存User集合中的文档。

这是我的User架构和Document架构

const UserSchema = new Schema({
  firstName: {
    type: String,
    required: true,
  },
  lastName: {
    type: String,
    required: true,
  },
 email: {
   type: String,
   validate: [{ validator: value => isEmail(value), msg: 'Invalid email.' 
  }],
  unique: true,
  required: true,
},
password: {
  type: String,
  required: true,
},
isAdmin: {
  type: Boolean,
  default: false,
 },
}, {
timestamps: true,
});

const User = mongoose.model('User', UserSchema);

文档架构

const DocumentSchema = new Schema({
   title: {
      type: String,
      required: true,
   },
   text: {
     type: String,
   },
  access: {
    type: String,
    enum: ['public', 'private'],
    default: 'public',
  },
 owner: {
   type: Schema.Types.ObjectId,
   ref: 'User',
   required: true,
  },
 }, {
 timestamps: true,
});

const Document = mongoose.model('Document', DocumentSchema);

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

对于这种情况,您可以在pre save架构中添加Document功能,该架构将在save Document之前调用。

const DocumentSchema = new Schema({
  // ...
 }, {
 timestamps: true,
});


DocumentSchema .pre("save",function(next) {
  var self = this;
  if (self.owner) {
    mongoose.models['User'].findOne({_id : self.owner }, function(err, existUser){
      if(err){
        return next(false, err);
      }

      if(!existUser)
        return next(false, "Invalid user reference");
      else
        return next(true);
    });
  } else {
    next(false, "Owner is required");
  }
});

const Document = mongoose.model('Document', DocumentSchema);