Javascript 如何根据条件设置Mongoose模式的默认属性值

Javascript 如何根据条件设置Mongoose模式的默认属性值,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我有一个猫鼬模式: var UserSchema = new Schema({ "name":String, "gender":String, }); 我想添加另一个名为image的字段。如果性别为男性,则此图像将具有默认值;如果性别为女性,则此图像将具有另一个默认值。我发现默认值可以设置为: image: { type: ObjectId, default: "" } 但是我找不到如何设置条件。您可以使用 pre:save钩子可用于在文档保存前设置其值: var User

我有一个猫鼬模式:

var UserSchema = new Schema({
    "name":String, 
    "gender":String,
});
我想添加另一个名为image的字段。如果性别为
男性
,则此图像将具有默认值;如果性别为
女性
,则此图像将具有另一个默认值。我发现默认值可以设置为:

image: { type: ObjectId, default: "" }

但是我找不到如何设置条件。

您可以使用

pre:save
钩子可用于在文档保存前设置其值:

var UserSchema = new Schema({
    "name":String, 
    "gender":String,
});

UserSchema.pre('save', function(next) {
  if (this.gender === 'male') {
    this.image = 'Some value';
  } else {
    this.image = 'Other value';
  }

  next();
});

您可以将“默认”选项设置为测试某些条件的函数。然后,在首次创建对象时,将函数的返回值设置为默认值。这就是它的样子

image: {
    type: ObjectId,
    default: function() {  
       if (this.gender === "male") {
          return male placeholder image;
       } else {
        return female placeholder image;
      } 
    }
}
image: {
    type: String,
    default: function() {
       if (this.gender === "male") {
          return "male placeholder link";
       } else {
          return "female placeholder link";
       }
    }
 }
对于设置默认占位符图像的特定目的,我认为使用链接作为默认值是一种更简单的方法。这就是模式的样子

image: {
    type: ObjectId,
    default: function() {  
       if (this.gender === "male") {
          return male placeholder image;
       } else {
        return female placeholder image;
      } 
    }
}
image: {
    type: String,
    default: function() {
       if (this.gender === "male") {
          return "male placeholder link";
       } else {
          return "female placeholder link";
       }
    }
 }
如果有人需要,这些是指向占位符图像的链接