【问题标题】:How to set the value of a default attribute of a Mongoose schema based on a condition如何根据条件设置 Mongoose 模式的默认属性的值
【发布时间】:2023-03-26 06:19:01
【问题描述】:

我有这个猫鼬模式:

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

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

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

但我不知道如何设置条件。

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    您可以使用document middleware 来实现此目的。

    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();
    });
    

    【讨论】:

      【解决方案2】:

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

      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";
             }
          }
       }
      

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

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

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

      【讨论】:

        猜你喜欢
        • 2013-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-11
        • 2011-11-11
        • 2016-01-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多