我试图找到与指定的ObjectId匹配的文档并发布,但是即使那里不存在文档,结果也总是可以返回。
这是我的下面的代码:
router.post('/check',(req,res) => {
MongoClient.connect(dburl,{useNewUrlParser:true},(err,client) => {
var ObjectId = require('mongodb').ObjectID;
var uId = { _id:new ObjectId(req.body.uId)};
var pId = req.body.pId;
if(err){
console.log("Error" +err);
}else{
var collect = client.db('Example').collection('Wishlist');
collect.find({_id:uId,postId:pId},(err,doc) => {
if(err){
console.log("Error" +err);
}if(doc){
res.send("Available");
}else{
res.send("Not available");
client.close();
}
});
}
});
});
请让我知道我做错了什么,我们将不胜感激。
谢谢
答案 0 :(得分:0)
假设您没有中间件将req.body.pId
转换为整数,并且该中间件不是数据库中的字符串值,那么您的查询将找不到任何内容。毕竟123 !== "123"
。查询{_id:uId,postId:pId}
当前正在搜索ObjectId
和string
。
将用户输入的值转换为整数:
var pId = parseInt(req.body.pId, 10);
现在查询{_id:uId,postId:pId}
将搜索ObjectId
和integer
。
另一件事看起来很奇怪,那就是您在对象中拥有_id
值。虽然在MongoDb中可以实现,但不是以下情况吗?
var uId = new ObjectId(req.body.uId);