项目中遇到的一个大坑
在使用moogse操作数据库的时候,普通的单表查询使用数据表创建自带的_id,传入的时候是一个字符串,但是数据表中_id是一个mongoose.Schema.Types.ObjectId类型的值,但是这个是可以查询的
//获取分类名称
router.post('/queryCategoryName',function(req, res ,next) {
const {_id} = req.body
CategoryModel.findOne({_id}, function(err,category) {
if(!err) res.send({code:0,data:category.categoryName})
else res.send({code:1,msg:'该文章没有分类'})
})
})
问题来啦
多表查询的时候,这个表中相关的属性值的类型就必须相同才可以查询到。一开始passage这个表中的categoryID的类型是String,可是categories中_id是mongoose.Schema.Types.ObjectId类型,最后导致合并表中的cate为空。这就是出错的原因。
PassageModel.aggregate([
{
$lookup: {
from: 'categories',
localField: "categoryID",
foreignField: "_id",
as: "cate",
}
}
],function(err,docs){
console.log(err)
res.send({code:0,data:docs})
})
解决办法
首先修改数据格式
将数据表中的数据修改成对应_id的类型
这是一个大坑,之前一般用的单表查询,没有考虑那么多的问题,结果今天写项目直接崩溃。
参考博客
按着流程写一遍
学费了吗