Mongodb按月模式存储销售数据

时间:2016-10-07 12:16:07

标签: node.js mongodb mongoose

如果我想检索/插入月度销售数字,我该如何定义我的架构?像这样?

sales: [{
Jan:Number,
Feb:Number
}]

3 个答案:

答案 0 :(得分:0)

您不应该在mongodb架构中使用值作为字段名称,因此很难对其进行查询。您想要保存哪些数据,可以保存一年中每个月的日期,或者分别保存月份和年份字段。

以下是我认为你可以使用的两种模式。

sales:[
    {
        month_date: {type: Date},
        amount: {type: Number}
    }
]


sales:[
    {
        month: {type: String},
        year: {type: Number},
        amount: {type: Number}
    }
]

使用这些架构,您可以轻松查询这些记录

答案 1 :(得分:0)

您可以简单地创建一个架构,如下所示

var monthlySale = new Schema({ 
   sale: Number, 
   month: Number, //may be string
   year: Number
});

var MonthlySale = mongoose.model('MonthlySale', monthlySale);

你可以插入

var sale = new MonthlySale({ sale: 5000, month: 7, year: 2016})
sale.save(function(err, saleObj) {
    if(err) 
       console.log('Unable to create sale')
    else
       console.log('New sale created')
});

你可能会发现如下

MonthlySale.findOne({month: 7, year: 2016}, function(err, sale) {
    if(err) 
       console.log('Unable to fetch sale')
    else
       console.log('Sale : ', sale)
});

答案 2 :(得分:0)

您可以使用joi验证,这是一个示例...(注意:我通过导出它使其动态化,以便您可以在任何地方使用...)

因此,您必须先导入joi模块。见下文......

var joi = require('joi');

现在下面是字符串,数字等的验证器......

var string = joi.string().min(2).max(50); //you can also set max,min..
var bool = joi.boolean();
var number = joi.number().min(1).max(999999999).required();   
var object = function object(obj) {
      return joi.object().keys(obj);
    }        
var array = function array(ary) {
      return joi.array().items(ary).min(1);
    }

现在只需将这些全部导出......

module.exports = {
  string: string,
  bool: bool,
  number: number,
  object: object,
  array: array
}

现在您可以导入保存它的文件,并可以使用这些验证器。

var schema = { 
   firstname: string.label('user firstname'), 
   lastname: string.label('user lastname'),
   gender: bool.label('user gender'),
   age: number.label('user age')
};