是否可以根据mongoose模式中的其他值定义文档值?

时间:2016-06-06 23:36:40

标签: javascript node.js mongodb mongoose

我在模型架构上有limitcount。一旦这两个值相等,我希望布尔值reachedLimit变为真。有没有办法在模型中自动计算,或者我是否需要手动计算?

我尝试了下面的代码,它总是返回true。即使它按预期返回false,我认为它会在创建时为reachedLimit分配一个默认值,然后永远不会重新赋值。在模型上动态检查相等性的最佳方法是什么?

const invitationSchema = new Schema({
    limit: { type: Number, default: 1 },
    count: { type: Number, default: 0 },
    reachedLimit: { type: Boolean, default: {
        $eq: ['$limit', '$count'],
    } },
});

1 个答案:

答案 0 :(得分:1)

您可以在架构中添加reachedLimit作为virtual来执行此操作:

const invitationSchema = new Schema({
    limit: { type: Number, default: 1 },
    count: { type: Number, default: 0 }
});
invitationSchema.virtual('reachedLimit').get(function() {
    return this.limit === this.count;
});

顾名思义,这实际上并不会将字段添加到保存的文档中,而是在查询文档时作为附加属性生成。