我正在尝试让我的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);
});
答案 0 :(得分:1)
req.params.id
以字符串形式返回您的ID,而我认为在汇总match
部分您需要将其作为ObjectId传递。因此,您应该将其转换为ObjectId:
$match: { _id: ObjectId(req.params.id) }