带/:id输入的Express Route返回空数组

时间:2017-05-19 14:11:22

标签: node.js mongodb express mongoose

我正在尝试让我的API以id作为输入,并根据给定的id从mongoDB返回结果。

我的示例集合如下所示:

id: 1 {
   count: 5
}
id: 2 {
   count: 10
}

我的mongoose Schemas看起来像这样:

var tripSchema = new Schema({
    _id: Number,
    count: Number
},
    {collection: 'test'}
);

我为这条路线创建了另一个文件,我认为错误在于:

module.exports = function(app) {
    app.get('/trips/:id', function(req,res) {
        console.log(req.params.id); // Does print the ID correctly
            var aggr = Trip.aggregate([
                {   "$match": {
                        "_id": {
                            "$eq": req.params.id
                        }
                     }
                },
                {
                "$project": {
                    "_id"  : 1,
                    "count": "$count"
                }
            }
            ])
            aggr.options = { allowDiskUse: true };
            aggr.exec(function(err, stations){
            if(err)
                res.send(err);
            res.json(stations); 
        });
    });
}

现在使用邮递员我尝试GET /trips/72,但这会产生一个空数组[],数据库中有一个_id 72条目对应像上面一样计算。我的问题是,如果这是正确的方法,我在这里做错了。

- 更新: match阶段或整个aggregation似乎有问题。我选择了mongoose的findById,现在就可以了:

    Trip.findById(req.params.id, function (err, doc){
      res.json(doc);
    });

1 个答案:

答案 0 :(得分:1)

req.params.id以字符串形式返回您的ID,而我认为在汇总match部分您需要将其作为ObjectId传递。因此,您应该将其转换为ObjectId:

$match: { _id: ObjectId(req.params.id) }