为什么find方法在Mongoose中不起作用

时间:2019-03-04 08:55:10

标签: node.js mongodb mongoose

我正在用猫鼬制作一个快递应用程序。

.find方法在其他路由中有效,但在我的博客路由中却无效。

这是我的猫鼬模型:

    const mongoose = require('mongoose');

let BlogSchema = new mongoose.Schema({
    title: {type: String, unique: true, required: true},
    body: {type: String},
    category:  String,
    permalink: String,
    date: {type: Date, default: Date.now},
    image: {type: String},
    imageId: String,
    tags:[{type: String}],
    author: {
        id: {
            type: mongoose.Schema.Types.ObjectId,
            ref: "User"
        },
        username: String
    }
});


  let Blog = mongoose.model('Blog', BlogSchema);

  module.exports = Blog;

这是我的router.get

//SHOW ROUTE
router.get('/blog/:category/:permalink', (req,res)=>{

        console.log(req.params) //{ category: 'travel', permalink: 'why-travel-to-places' }
    Blog.find({category: req.params.category,permalink: req.params.permalink}, (err, foundPost)=> {
        if (err){
            console.log(err)
        } else {
            console.log(foundPost) // []
            res.render('blog/show', {post: foundPost});
        }
    });
});

如您所见,我console.log req.paramsfoundPost。 req.params结果为{ category: 'travel', permalink: 'why-travel-to-el-nido' },foundPost为空数组[]

现在,我使用db.blogs.find({category: "travel"}).pretty()查看了mongo,并找到了它。但是在我的表演路线中,找不到它吗?

我查看了与我的问题有关的其他问题,有人说它可能与模式有关,但就我而言,不是。

我的.find()在其他路由中工作,但在此路由中不工作。

我错过了什么吗,请帮忙。谢谢

1 个答案:

答案 0 :(得分:1)

我很确定.find()可以正常工作,但是在数据库中找不到具有该查询条件的任何文档。请注意,在路由代码中,您正在查询{ category: 'travel', permalink: 'why-travel-to-el-nido' },即匹配的Blog文档必须具有category: 'travel' AND permalink: 'why-travel-to-el-nido'字段,但是当您查看Mongo时使用db.blogs.find({category: "travel"}).pretty()只能 查找具有{category: "travel"},但对permalink字段没有限制的Blog文档。

请使用db.blogs.find({category: "travel", permalink: "why-travel-to-el-nido"}).pretty()在Mongo中再次搜索,以模拟该路线中的相同查询,并查看是否可以找到符合该条件的任何文档。

我的猜测是您找不到任何东西,所以猫鼬.find()返回一个空数组,表示“无匹配项”。

编辑:我刚刚看到了Neil Lunn的评论,猫鼬配置可能没有指向正确的数据库。按照他的指示进行操作,以确保您要查询的是所需的集合。