提问者:小点点

Mongoose findById回调返回null,尽管存在记录


我搞不懂这个。如果记录存在,则err有效。相反,如果记录不存在,则err无效。

然而,article始终为空,尽管该记录存在于数据库中。

router.get("/:id", function (req, res) {
    Article.findById(req.params.id, function(err, article) {
        if (err) {
            res.send(`Error: ${err}`);
        } else {
            //Print out "null"
            console.log(article);
            
            //Error occur
            Article.updateOne({_id: req.params.id}, {$set:{views: article.views + 1}});
            res.render("showArticle", { article: article});
        }
    });
});

物品型号:

var mongoose = require("mongoose");

const articleSchema = new mongoose.Schema({
    title: {
        type: String,
        required: true
    },
    description: {
        type: String,
        required: false
    },
    content: {
        type: String,
        required: true
    },
    createdDate: {
        type: Date,
        default: Date.now
    },
    views: {
        type: Number,
        default: 0
    }
});

module.exports = mongoose.model("Article", articleSchema);

共1个答案

匿名用户

找了几个小时,OK.。。我真傻。我还没有给出mongoose.model中的第三个参数。

更改:

module.exports = mongoose.model("Article", articleSchema);

module.exports = mongoose.model("Article", articleSchema, "Article");

我发现如果没有集合名称,mongoose.prototype.model将自动在模型名称的末尾添加一个“S”,这意味着article集合将被命名为articles