【问题标题】:Express, Mongoose, db.findOne always returns same documentExpress、Mongoose、db.findOne 总是返回相同的文档
【发布时间】:2019-05-04 08:37:26
【问题描述】:

我正在尝试使用 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 个独立的“玩家”,具有三个不同的“玩家 ID”字段(38187361、35167321、95821442)。我可以使用 Postman 获取以下 URL,例如:

http://localhost:3000/api/player/anythingyouWantInHere

它会返回 38187361,第一个文档。我浏览过这个网站、许多教程和 Mongoose 文档,但我看不出我做错了什么......

我希望最终通过 playerId 或用户名或电子邮件找到,但一次一个障碍......

【问题讨论】:

    标签: node.js mongodb express mongoose


    【解决方案1】:

    您的路线是“/api/player/:id”,因此 req.params 对象上的键将是“id”而不是“playerId”。

    我不知道什么/在哪里/如果您正在填充 playerId 参数,但如果您更新查询以调用 req.params.id 它实际上应该根据您想要的路径更改文档去做。

    【讨论】:

    • 就是这样。我无法理解 'req.params.*' 我将代码更改为: app.get('/api/player/:playerId', (req, res) =>{ Player.findOne({playerId: req.params .playerId},
    【解决方案2】:

    findOne 的 mongoose 文档中,如果您将 Id 传递给 null 或空值,它将在内部查询 db.players.findOne({}),这将在您每次获取时返回集合的第一个文档。因此,请确保您在此处传递非空 id。

    注意:条件是可选的,如果条件为空或未定义, mongoose 将向 MongoDB 发送一个空的 findOne 命令,这将 返回任意文档。如果您通过 _id 查询,请使用 findById() 代替。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,就是列的表名与我创建的模型不同。 在我的模型中,错误列的名称是“role”,而在我的表中是“rol”。

      【讨论】:

        猜你喜欢
        • 2020-08-17
        • 2018-05-23
        • 1970-01-01
        • 2021-12-26
        • 1970-01-01
        • 2019-10-04
        • 1970-01-01
        • 2019-07-15
        • 2021-06-03
        相关资源
        最近更新 更多