node.js/express路由中的Mongoose组查询
Mongoose group query in node.js / express route
你好,我有以下在Robomongo中执行的查询按预期工作:
db.av.group(
{
key: { roomId: 1},
cond: { dateOfDay: { $gte: new Date('12/01/2014'), $lt: new Date('12/30/2014') } },
reduce: function( curr, result ) {
result.total += curr.price;
result.count++;
},
initial: { total : 0,
count : 0
},
finalize: function(result) {
result.avg = Math.round(result.total / result.count);
}
}
)
在快递应用程序中实现后:
app.get('/api/checkAv/:checkIn/:checkOut', function(req, res) {
var checkIn = req.params.checkIn,
checkOut = req.params.checkOut,
roomType = req.params.roomType;
model.Av.group(
{
key: { roomId: 1},
cond: { dateOfDay: { $gte: new Date('12/01/2014'), $lt: new Date('12/30/2014') } },
reduce: function( curr, result ) {
result.total += curr.price;
result.count++;
},
initial: { total : 0,
count : 0
},
finalize: function(result) {
result.avg = Math.round(result.total / result.count);
}
}
).exec(function(err, av) {
if (err)
res.send(err);
res.json(av);
});
});
我上了控制台:
类型错误:对象函数模型(doc,fields,skipId){if(!(this模型实例))返回新模型(doc、fields、skipId);Model.call(this,doc,fields,skipId);}在处没有方法"group"/home/www/domain.com/api/routes/routes.js:58:18 at Layer.handle[ashandle_request](/home/www/domain.com/node_modules/express/lib/router/layer.js:82:5)
在next(/home/www/domain.com/node_modules/express/lib/router/route.js:100:13)在Route.dispatch(/home/www/domain.com/node_modules/express/lib/router/route.js:81:3)
在Layer.handle[作为handle_request](/home/www/domain.com/node_modules/express/lib/router/layer.js:82:5)
在/home/www/brasovapartments.com/node_modules/express/lib/router/index.js:234:24在param(/home/www/domain.com/node_modules/express/lib/router/index.js:331:14)在param(/home/www/domain.com/node_modules/express/lib/router/index.js:347:14)在param(/home/www/domain.com/node_modules/express/lib/router/index.js:347:14)位于Function.proto.prrocess_params(/home/www/domain.com/node_modules/express/lib/router/index.js:391:3)
现在四处阅读,我看到一些人定义了一个群体财产,但不确定如何以及在哪里。。在Mongoose模式中?你能给我一个提示吗?我在这里有什么问题?
Mongoose不支持group
命令,并且在MongoDB 3.4中也被弃用,因为使用aggregate
可以更好地提供其功能。
您可以使用类似于的东西对aggregate
进行此操作
model.Av.aggregate([
{$match: {dateOfDay: {$gte: new Date('12/01/2014'), $lt:new Date('12/30/2014')}}},
{$group: {
_id: '$roomId',
total: {$sum: '$price'},
count: {$sum: 1},
avg: {$avg: '$price'}
}}
], function (err, result) {...});
如果不需要total
和count
字段,则可以省略它们,因为$avg
运算符允许您直接计算平均价格。
- 在mongoose中使用正则表达式在对象数组中进行查询搜索
- Mongoose查询嵌套文档的时间或多或少为某个日期
- Mongoose查询在两个日期时间之间提取数据
- 如何在javascript中克隆mongoose查询对象
- Mongoose查询阻塞Node.js
- mongoose查询返回链接到用户的产品
- Node.js:从mongoose查询返回正确的JSON
- 无法向 Mongoose 查询返回的对象添加新属性
- 通过AngularJS中的按钮点击/滚动来增加Mongoose查询限制
- 使用多个ObjectId的Mongoose查询(带有'ref')
- Mongoose查询没有't返回错误
- 如何使用AND和OR进行条件Mongoose查询
- Mongoose查询被馈送到数组中
- 在mongoose查询和保存期间,javascript推送到循环内部的数组
- 如何在mongodb / mongoose查询中改变基于参数的结果位置
- 使用Mongoose查询是正确的,但是forEach之后数组总是空的.Nodejs / MongoDB
- 在BSON文档中向来自Mongoose查询的数组中添加项时的意外行为
- 如何修改从Mongoose查询返回的数据?
- Mongoose查询以在多个数组中查找匹配的元素
- 带有通配符的Mongoose查询Where子句