【问题标题】:Constant property value in mongoose schema猫鼬模式中的常量属性值
【发布时间】:2019-06-11 23:02:59
【问题描述】:

我有 a 属性始终等于 1 的架构。我找到了解决方案,但我不喜欢它:

var schema = new Schema({
    a: Number
});

schema.pre('save', function(){
    this.a = 1;
});

你能告诉我是否有更好的方法吗?例如:

var schema = new Schema({
    a: 1
});

【问题讨论】:

标签: node.js mongoose


【解决方案1】:

使用默认值怎么样,是否达到你想要的效果?

var schema = new Schema({ a: {type: Number, default: 1} });

如果你想强制它,pre 版本是最好的选择。

【讨论】:

  • 谢谢。我也想过那个版本,但我想强制它。反正我觉得你的回答对我来说已经足够了
  • 我认为还有一种更骇人听闻的解决方案来强制价值)){type: Number, default: 1, enums: [1]}
【解决方案2】:

实现此目的的另一种方法是使用virtual property。 Virtuals 是您可以获取和设置但不会持久保存到 MongoDB 的文档属性。相反,您可以指定一个 getter 函数,每次访问 a 属性时都会调用该函数:

schema.virtual('a').get(function () {
    return 1;
});

现在schema 的每个文档都将有一个属性a 等于1。但是请注意,由于虚拟对象不会持久化,因此您无法查询它们。

【讨论】:

    【解决方案3】:

    将常量存储为模型属性。

    var mySchema = new Schema({
        // ...
    });
    var myModel = mongoose.model('MyModel', mySchema);
    myModel.a = 1;
    

    【讨论】:

      【解决方案4】:

      也许为时已晚,但对于未来,您可以将默认值与始终返回旧值的自定义设置器一起使用,例如 ...

      var schema = new Schema({
        a: {
          type: Number,
          default: 1,
          set(value) {
            return this.a;
          },
        }
      });
      

      default 选项将初始化该字段,并且自定义设置器将忽略任何新值并始终将该字段重置为其以前的值(您设置为默认值)。

      【讨论】:

        猜你喜欢
        • 2022-01-12
        • 2011-11-14
        • 2021-10-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-08
        • 2015-02-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多