【问题标题】:Mongoose group query in node.js / express routenode.js / express route中的猫鼬组查询
【发布时间】:2015-01-04 05:09:42
【问题描述】:

您好,我有以下在 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);
    });
});

我进入控制台:

TypeError: Object function model(doc, fields, skipId) { if (!(this 模型实例)) 返回新模型(文档,字段,skipId); Model.call(this, doc, fields, skipId); } 在没有方法“组” /home/www/domain.com/api/routes/routes.js:58:18 at Layer.handle [as 处理请求] (/home/www/domain.com/node_modules/express/lib/router/layer.js:82:5)
接下来 (/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 [as 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 在参数 (/home/www/domain.com/node_modules/express/lib/router/index.js:331:14) 在参数 (/home/www/domain.com/node_modules/express/lib/router/index.js:347:14) 在参数 (/home/www/domain.com/node_modules/express/lib/router/index.js:347:14) 在 Function.proto.process_params (/home/www/domain.com/node_modules/express/lib/router/index.js:391:3)

现在阅读我看到一些人定义了一个组属性,但不确定如何以及在哪里......在 Mongoose 模式中? 你能告诉我这里有什么问题吗?

【问题讨论】:

    标签: javascript node.js mongodb express mongoose


    【解决方案1】:

    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 运算符可让您直接计算平均价格。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    • 2016-07-27
    • 2014-05-12
    • 2020-06-02
    • 2012-02-03
    • 2017-08-02
    • 1970-01-01
    相关资源
    最近更新 更多