【问题标题】:Mongo DB differences in NodeJS query resultMongoDB Node JS 查询结果的差异
【发布时间】:2016-08-26 17:48:33
【问题描述】:

在 MongoDB (3.2.7) shell 中执行以下查询:

db.coll.aggregate({$group: {_id : '$Name', count : {$sum: 1 }}}, {$project: { _id:0, Name: '$_id', count: 1 }})

我得到了我需要的东西:

{ "count" : 4, "Name" : "Name1" }
{ "count" : 5, "Name" : "Name2" }
{ "count" : 1, "Name" : "Name3" }
{ "count" : 9, "Name" : "Name4" }

我想在 NodeJS(mongodb 节点模块 2.2.5)中使用这个聚合,所以我定义了一个 API:

app.get('/api', function(req, res){
        db.collection('coll').aggregate({$group: {_id : '$Name', count : {$sum: 1 }}}, {$project: { _id: 0, Name: '$_id', count: 1 }}).toArray(function(err, docs) {
            if (err) {
                assert.equal(null);
            }
            else {
                console.log(docs);
                res.json(docs);
            }
        });
    });

当我执行这个 API 时,我得到了关于 shell 结果的不同结果:

[{"_id":"Name1","count":4},{"_id":"Name2","count":5},{"_id":"Name3","count":1},{"_id":"Name4","count":9}]

有人知道为什么会这样吗?似乎 $project 函数没有在 NodeJS API 中执行。

【问题讨论】:

    标签: node.js mongodb projection


    【解决方案1】:

    documentation 声明管道(aggregate 的第一个参数)应该是一个数组:

    db.collection('coll').aggregate([{
      $project: { _id: 0, Name: '$_id', count: 1 }
    }, {
      $group: {_id : '$Name', count : { $sum: 1 } }
    }]).toArray(...)
    

    【讨论】:

      猜你喜欢
      • 2014-03-19
      • 2017-05-28
      • 2016-12-19
      • 2020-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-01
      • 2015-10-25
      相关资源
      最近更新 更多