我正在用猫鼬制作一个快递应用程序。
.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.params
和foundPost
。
req.params结果为{ category: 'travel', permalink: 'why-travel-to-el-nido' }
,foundPost为空数组[]
现在,我使用db.blogs.find({category: "travel"}).pretty()
查看了mongo,并找到了它。但是在我的表演路线中,找不到它吗?
我查看了与我的问题有关的其他问题,有人说它可能与模式有关,但就我而言,不是。
我的.find()
在其他路由中工作,但在此路由中不工作。
我错过了什么吗,请帮忙。谢谢
答案 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的评论,猫鼬配置可能没有指向正确的数据库。按照他的指示进行操作,以确保您要查询的是所需的集合。