vin*_*eet 1 mongoose mongodb node.js
我正在使用mongoose 4.5.0并尝试使用聚合获取数据,但它失败了。
这是我的节点代码:-
..
var preMonths = new moment().subtract(4, 'months').date(1).toDate(); //4:for 5 month
var match = { $and: [] };
match.$and.push({ companyId: new ObjectID(req.user.companyId._id) });
match.$and.push({ status: 'CONVERTED' });
var allUnderUsers = [];
req.session.underUser.forEach(function(element, index) {
allUnderUsers.push(ObjectID(element))
});
match.$and.push({ assignTo: { $in: allUnderUsers } });
match.$and.push({ createdOn: { $gt: preMonths, $lt: new moment().toDate() } });
var aggregate = [
{ $match: match }, {
$group: {
_id: { month: { $month: "$date" },year: { $year: "$date" } },
total: { $sum: '$value' }
}
}
];
console.log(JSON.stringify(aggregate))
Lead.aggregate(aggregate)
.exec(function(err, data) {
if (err)
return next(err)
var temp = [];
data.forEach(function(element, index) {
temp.push([moment().month(element._id.month).format('MMM')+' '+element._id.year, element.total]);
})
res.status(200).json(temp)
})
..
Run Code Online (Sandbox Code Playgroud)
这是安慰后的查询字符串:-
> 控制台日志(聚合)
> [{"$match":{"$and":[{"companyId":"5875bb5ba5a2f0e52f76ec6c"},{"status":"CONVERTED"},{"assignTo":{"$in":["587dbf58cab7be105d076516" “587dcd3edca5f235f862fdfd”, “587e1002dca5f235f862fe03”, “587e1079ad90f640757d396a”, “587e1193af725041b6a41a4d”, “587e131faf725041b6a41a58”, “587f1705edf2fa25f0ed1935”, “5881a1ffc51165fbc30a2c60”, “58873cb9ca352ccf80337ccd”]}},{ “createdOn”:{ “$ GT”:“2016- 10-01T09:11:19.357Z","$lt":"2017-02-01T09:11:19.358Z"}}]}},{"$group":{"_id":{"month":{ "$month":"$date"},"year":{"$year":"$date"}},"total":{"$sum":"$value"}}}]
现在,这里错误:-
{ MongoError:无法在 Socket 的 Function.MongoError.create (/home/node_modules/mongodb-core/lib/error.js:31:11) 处从缺少 BSON 类型转换为 Date。(/home/node_modules/mongodb-core/lib/connection/connection.js:306:22) 在 Socket.emit (events.js:188:7) 上的 emitOne (events.js:96:13) 在 readableAddChunk (_stream_readable) .js:172:18) at Socket.Readable.push (_stream_readable.js:130:10) at TCP.onread (net.js:542:20) name: 'MongoError', message: 'can\'t convert from BSON 类型缺少日期',确定:0,errmsg:'无法从缺少 BSON 类型转换为日期',代码:16006,代码
名称:'Location16006' }
您正在尝试在非日期字段上使用 Mongo 日期操作(例如$year, $month, $day)。
问题在于您查询的这一部分:
_id: {
month: { $month: "$date" },
year: { $year: "$date" }
},
Run Code Online (Sandbox Code Playgroud)
可能您的部分或全部文档在该date领域没有价值。
(正如你所说,这是一个错字,你的领域有一个不同的名字!)
这里讨论了一个类似的问题,其中字段的值存在,但不是日期类型。
| 归档时间: |
|
| 查看次数: |
6479 次 |
| 最近记录: |