【发布时间】:2015-04-08 01:37:29
【问题描述】:
我正在形成要在 aggregate() 中执行的查询,如下所示:
query.$project = {};
query.$project.created_at = '$created_at';
query.$project.month = {};
query.$project.month.$month = currentMonth;
query.$match = {};
query.$match.month = currentMonth.getMonth() + 1;
query.$limit = 5;
query.$sort = {};
query.$sort.created_at = -1;
query.callback = function(err, result){
// do something
};
console.dir(query);
但是当我执行以下操作时:
DataTable.aggregate(query);
我明白了:
Error: Arguments must be aggregate pipeline operators
at Aggregate.append (C:\myproject\node_modules\mongoose\lib\aggregate.js:87:11)
at new Aggregate (C:\myproject\node_modules\mongoose\lib\aggregate.js:47:17)
at Function.aggregate (C:\myproject\node_modules\mongoose\lib\model.js:1889:17)
at C:\myproject\app\routes.js:179:23
at C:\myproject\node_modules\async\lib\async.js:570:21
at C:\myproject\node_modules\async\lib\async.js:249:17
at C:\myproject\node_modules\async\lib\async.js:125:13
我现在有两个问题:
- 有没有更好的方法来形成这个查询。
- 以及如何在这里指定回调函数。
编辑
我将上面的代码修改如下:
query.$project = {};
query.$project.created_at = '$created_at';
query.$project.month = {};
query.$project.month.$month = currentMonth;
query.$match = {};
query.$match.month = currentMonth.getMonth() + 1;
query.$limit = 5;
query.$sort = {};
query.$sort.created_at = -1;
但是当我执行以下操作时:
DataTable.aggregate(query, function(err, result){
// do something
});
【问题讨论】:
-
您构造的查询对象看起来像:
{$project:{},$match:{},$sort:{}},这是不正确的。而构造正确的查询可能看起来像:@thefourtheye 提到的以下答案:[{$project:{}},{$match:{}}]。
标签: javascript node.js mongodb mongoose