我一直试图检索一些数据,但我一直收到错误。这是我路线的片段,请告诉我它有什么问题。 我正试图从集合2获得jobID,它由集合1中的类别表示。希望它有意义。
我收到此错误 UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝ID:1):MongoError:'cursor'选项是必需的,除了带有explain参数的聚合
router.get('/jobs/:type', (req, res, next)=>{
Job.aggregate([
{ $match : { category: req.params.type, "bidcounter": { $gt:-1, $lt:5} } },
{
$lookup:
{
from: "job_cat",
localField: "category",
foreignField: "jobID",
as: "product_cat"
}
}, { $sort : { date : -1} }
], function(err, jobs){
res.json(jobs);
});
});
答案 0 :(得分:1)
一些帮助您调试的解决方案:
首先,设置一个promise库,让你能够.catch你的错误。
Adding promise library to mongoose
现在你可以这样做:
Job.aggregate([{
$match: {
category: req.params.type,
"bidcounter": {
$gt: -1,
$lt: 5
}
}
},
{
$lookup: {
from: "job_cat",
localField: "category",
foreignField: "jobID",
as: "product_cat"
}
}, {
$sort: {
date: -1
}
}
])
.catch((err) => {
//error, its handled now!
})
要查看错误是什么,你可以做到这一点,但我记得在某处读过这不是最佳做法。
我过去曾经使用它,只看到我的错误来自哪里。
process.on('unhandledRejection', error => {
console.log('unhandledRejection', error.message);
});
答案 1 :(得分:1)
MongoDB在3.6中更改了聚合命令的工作原理。聚合现在需要一个游标。来自参考https://github.com/Mockgoose/Mockgoose/issues/32 让管道包含业务逻辑,然后在下面可以帮助
Job.aggregate(pipeline)
.cursor({})
.exec((err, results)=>{
console.log(err, results)
})