moogse操作mongodb数据库进行多表聚合查询$lookup

项目中遇到的一个大坑

在使用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的类型
在这里插入图片描述
这是一个大坑,之前一般用的单表查询,没有考虑那么多的问题,结果今天写项目直接崩溃。
参考博客
按着流程写一遍
学费了吗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程小飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值