mongoose模式中的常量属性值

时间:2014-09-30 15:16:18

标签: node.js mongoose

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

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

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

如果有更好的方法可以告诉我吗?例如:

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

4 个答案:

答案 0 :(得分:3)

如何使用默认值,它能达到你想要的效果吗?

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

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

答案 1 :(得分:1)

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

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

现在,schema的每个文档的属性a都等于1。但请注意,由于虚拟内容未被持久化,因此您无法查询它们。

答案 2 :(得分:1)

将常量存储为模型属性。

[[1, 1, 1]]  # terms
[[1, 1, 2]]  # twos
[1, 1, 2]    # terms

答案 3 :(得分:0)

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

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

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