Express,Mongoose,db.findOne始终返回同一文档

时间:2018-12-03 03:45:39

标签: node.js mongodb express mongoose

我正在尝试使用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或用户名或电子邮件来查找,但一次遇到一个障碍...

2 个答案:

答案 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()。