我正在尝试使用MEAN堆栈的CRUD应用程序。我在Express中使用猫鼬呼叫MongoDB。我正在使用带有指定参数的FindOne函数,并且总是返回相同(不正确)的文档。
我知道我已连接到正确的数据库,因为我从该集合中获得了一个文档,但是无论我作为参数传递什么,它始终是同一文档。
module.exports = mongoose.model('Player', playersSchema, 'players'); //in player.js
const Player = require('./model/players');
app.get('/api/player/:id', (req, res) =>{
Player.findOne({id: req.params.playerId},
function(err, player) {
if(err) {
res.json(err);
}
else {
res.json(player);
}
});
});
我有3个单独的“玩家”,其中有3个不同的“玩家ID”字段(38187361、35167321、95821442)。我可以使用邮递员获取以下URL,例如:
http://localhost:3000/api/player/anythingyouWantInHere
,它将返回38187361,第一个文档。我浏览过该网站,许多教程和Mongoose文档,但看不到我在做错什么。
我最终想通过playerId或用户名或电子邮件来查找,但一次遇到一个障碍...
答案 0 :(得分:0)
您的路线是'/ api / player /:id',因此req.params对象上的键将是'id'而不是'playerId'。
我不知道在哪里/在哪里/如果要填充playerId参数,但是如果更新查询以调用req.params.id,它实际上应该根据您想要的路径更改文档去做。
答案 1 :(得分:0)
从findOne的猫鼬文档中,如果您向Id
传递一个null或一个空值,它将在内部查询db.players.findOne({})
,每次获取时都会返回该集合的第一个文档。因此,请确保您在此处传递非空ID。
注意:条件是可选的,如果条件为null或未定义, 猫鼬将向MongoDB发送一个空的findOne命令,该命令将 返回任意文档。如果要通过_id查询,请使用 而不是findById()。