MongoDB模型字段是乘以2个字段的结果

时间:2014-02-28 22:18:51

标签: javascript node.js mongodb forms mongoose

我在尝试找出最佳方法时遇到了一些问题:

我有一个表单,我可以通过几个单选按钮以两种不同的方式为用户业务设置定价值:

成员,我有两个字段,“每个成员的金额”和“数量”。 按金额,我只有一个字段,“总金额”。

我必须将这些数据存储在DB中名为“price”的字段中。因此,如果我使用“按成员”选项提交表单,“价格”将是“每个成员金额”*“数量”的结果。如果我使用“按金额”选项提交表单,“价格”应为“总金额”字段值。

这里的问题是我不知道在模型上管理这个“条件”事物的最佳方法是哪种,所以也许你可以帮助我:D。

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您对模型使用mongoose,可以执行以下操作:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

mongoose.connect('mongodb://localhost/nodetest')

// Define schema
var formSchema = new Schema({

  member: { type: Boolean, default: false },      
  qty:    { type: Number, default: 0 },
  amount: { type: Number, default: 0 },
  price:  { type: Number, default: 0 }

});

// Set up some getters and setters to calculate

formSchema.path('price').get(function(value) {
    if (!this.member) {
      return this.qty * this.amount;
    }
    return value;
});

formSchema.path('qty').set(function(value) {
    if (!this.member) {
        this.price = value * this.amount;
    }
    return value;
});

formSchema.path('amount').set(function(value) {
   if (!this.member) {
       this.price = this.qty * value;
   )
   return value;
});

// Define the model for the Schema
var Form = mongoose.model('Form', formSchema);

// Then use in your code
var form1 = new Form({ qty: 2, amount: 10 });
var form2 = new Form({ qty: 3, amount: 10, member: true, price: 25 });
console.log( form1 );
console.log( form2 );

这样会在模型中的price字段中填入一个计算值,其中member值为false,但如果为true,则传入的值将为永远很荣幸。

我会将表单处理留给您,但这就是您可以在模型中保留逻辑的方法。