2017-02-23 189 views
2

这里是我的模型文件:如何计算和计算两个日期之间的字段?

income.js

var incomeSchema = new schema({ 
    issuedBy: { type: schema.Types.ObjectId, ref: 'user' }, 
    amount: {type: Number, default: 0}, 
    content: { type: String, default :''}, 
    note: { type: String, default: ''} 
}, {timestamps: true}); 

现在我要总结量的所有值2日期间生产数所有这些日期之间的数据导出到一个表。

例如:我要总结2017年2月12日和2017年2月23日之间的所有量,显示它是这样的:

1.Number交易:20

2.Total:$ 2500个

3.显示两个日期之间所有数据的表格。

我曾尝试使用

collection.find({'createdAt': {$gte: Date, $lte: Date}} 

一些答案,但我仍然无法做到这一点。

任何解决方案,将不胜感激。谢谢。

回答

2

你可以尝试下面的聚合。

db.collection.aggregate(
    [{ 
     $match: { 
      createdAt: { 
       $gte: new Date('2017-02-12'), 
       $lte: new Date('2017-02-23') 
      } 
     } 
    }, { 
     $group: { 
      _id: null, 
      Total: { 
       $sum: "$amount" 
      }, 
      NoOfTransactions: { 
       $sum: 1 
      } 
     } 
    }] 
) 

您可以使用$ out阶段写入新集合。

1

你可以用简单的方法做到这一点。

db.collection.find({ "field" : { $gt: value1, $lt: value2 } }); // value1 < field < value 

或 首先,在架构,您需要定义日期字段的类型为:

{date: { type: Date, default: Date.now }} 

然后当u查询的日期范围:

db.collection.find({"field": {'$gte': new Date('3/1/2014'), '$lt': new Date('3/16/2014')}}); 
+0

感谢您的回复。我尝试了你的建议,但我只检索了1条记录。我在我的问题中提到你的建议。 – user3881004

+0

可能你只有一个记录在你的收藏中,符合我们的要求 –

+0

我发现问题......我认为$ lte小于或等于,但它似乎只能检索较小的记录。我试图将日期更改为前一天,并且运行良好。 – user3881004

相关问题