Mongoose populate不工作,返回undefined

时间:2018-01-30 20:00:43

标签: javascript node.js mongodb express mongoose

app.get("/index/:id", function(req, res)
{
  campgrounds.findById({ _id: req.params.id }).populate("comment").exec(
    function(error, foundscamp) {
        console.log(foundscamp);
        if (error) {
            consol.log(error);
            console.log("you gotcha error");
        } else {
            //render the show page with sopecific id
            res.render("show.ejs", { foundcamps: foundscamp });
        }
    });
});

1 个答案:

答案 0 :(得分:0)

如果我们查看有关findById mongoosejs 文档:

  

Model.findById()

     

通过_id字段查找单个文档。 findById(id)几乎*等同于findOne({ _id: id })。如果您想按文档_id进行查询,请使用findById()代替findOne()

     
      
  • 除了如何处理undefined之外。如果您使用findOne(),则会看到findOne(undefined)findOne({ _id: undefined })等同于findOne({})并返回任意文档。但是,mongoose会将findById(undefined)翻译为findOne({ _id: null })
  •   

您可以看到问题是findById()消耗的是_id,而不是json { _id : id }。所以改变:

campgrounds.findById({ _id: req.params.id })...

campgrounds.findById({ req.params.id })...

其余代码看起来很好(除了Daniel指向的consol.log())。