我确实将数据插入了MongoDB数据库,现在我想将用户请求的id与数据库中存储的id进行比较。当我使用forEach循环执行此操作时,得到的错误为TypeError:无法读取未定义的属性"forEach"。我在堆栈溢出中进行了搜索,但仍然无法找出问题所在。帮我解决这个问题!
这是我的代码:
app.get('/product/:id', (req, res) => {
MongoClient.connect(url, { useNewUrlParser: true }, (err, db) => {
if (err) throw err;
var dbo = db.db("product");
var cursor = dbo.collection("details").find({}).toArray((err, result) => {
if (err) throw err;
cursor.forEach((_id)=>{
if (_id == req.params.id) {
return true;
db.close();
}
})
console.log(result);
});
});
});
我存储在数据库中的数据是:
[ { _id: '1', producttitle: 'Levis' } ]
您需要迭代结果变量而不是游标这是因为游标变量未定义,因为任务尚未完成。
此外,您需要访问结果的_id:
result.forEach((currUser)=>{
if (currUser._id == req.params.id) {
return true;
db.close();
}
})
如果您不介意使用async/await:
app.get('/product/:id', (req, res) => {
MongoClient.connect(url, { useNewUrlParser: true }, async (err, db) => {
if (err) throw err;
var dbo = db.db("product");
try{
var results = await dbo.collection("details").find({}).toArray();
results.forEach((product) => {
if(product.id === req.params.id){
// do something you like here.
return true;
db.close();
}
});
}catch(e){
// error
}
});
});
顺便说一句,我想你find
了数据库中的所有文档,因为你还需要做其他事情。但是,如果不是,则应该将条件放入查询中,如dbo.collection("details").find({_id: req.params.id})
。