errmsg“:”无法从BSON类型的字符串转换为Date

时间:2019-11-13 03:00:36

标签: database mongodb date aggregation-framework operators

我正在尝试汇总给定年份的月份和年份的销售总额。因此,我会遵循文档以及其他人使用此代码所做的事情:

`db.sales.aggregate([{$project: {year: {$year: "saleDate"}, month: {$month: "saleDate"}, dayOfMonth: 
                    {$dayOfMonth: "saleDate"}}}, {$group: {_id: {year: '$year', month: '$month'}, 
                     count: {$sum: 1}}}]);

但是它返回错误:     "errmsg" : "can't convert from BSON type string to Date"

我不明白为什么指南针中的模式说它是“日期”类型。

我尝试使用'new Date'函数完成的另一种方式,但没有错误但没有结果。.我不知道如何在mongo中处理日期

`db.sales.aggregate([{$match: {'saleDate': {$gte: {$dayOfYear: new Date("2017-06-01")}, 
                      $lt: {$dayOfYear: new Date("2017-07-01")}}}}, 
                      {$group: {_id: { 'numberofSales': {$sum: 1}}}}])  

1 个答案:

答案 0 :(得分:1)

第一个查询的问题是您缺少美元符号,MongoDB认为saleDate是硬编码的字符串,而不是$saleDate 字段参考,请尝试:

db.sales.aggregate([{$project: {year: {$year: "$saleDate"}, month: {$month: "$saleDate"}, dayOfMonth: 
                    {$dayOfMonth: "$saleDate"}}}, {$group: {_id: {year: '$year', month: '$month'}, 
                    count: {$sum: 1}}}]);

更多here

您的第二个查询将不起作用,因为您正尝试将$dayOfYear返回的数字与日期字段进行比较。