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

Lor*_*nzo 3 javascript mongoose mongodb node.js

我有这个猫鼬的模式:

var UserSchema = new Schema({
    "name":String, 
    "gender":String,
});
Run Code Online (Sandbox Code Playgroud)

我想添加另一个名为image的字段。如果性别为male,则此图像将具有默认值,如果性别为,则它将具有另一个默认值female。我发现可以使用以下方式设置默认值:

image: { type: ObjectId, default: "" }
Run Code Online (Sandbox Code Playgroud)

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

gne*_*kus 5

您可以使用文档中间件来实现。

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();
});
Run Code Online (Sandbox Code Playgroud)


Sam*_*ale 5

您可以将 'default' 选项设置为测试某些条件的函数。当对象第一次创建时,函数的返回值被设置为默认值。这就是它的样子。

image: {
    type: ObjectId,
    default: function() {  
       if (this.gender === "male") {
          return male placeholder image;
       } else {
        return female placeholder image;
      } 
    }
}
Run Code Online (Sandbox Code Playgroud)

对于设置默认占位符图像的特定目的,我认为使用链接作为默认值是一种更简单的方法。这就是架构的样子。

image: {
    type: String,
    default: function() {
       if (this.gender === "male") {
          return "male placeholder link";
       } else {
          return "female placeholder link";
       }
    }
 }
Run Code Online (Sandbox Code Playgroud)

如果有人可能需要它们,这些是占位符图像的链接。

https://i.ibb.co/gSbgf9K/male-placeholder.jpg

https://i.ibb.co/dKx0vDS/woman-placeholder.jpg