当前位置: 首页 > 知识库问答 >
问题:

MongoDB查询聚合localField ObjectId字符串和外字段ObjectId

洪凯定
2023-03-14
    await dbConn()
    return User.aggregate([
       {
           $match:{_id: mongoose.Types.ObjectId(id)}
       },
       {
           $unwind:'$imgIds'
       },

       {
           $lookup:{
               from:'images',
               localField:'imgIds',
               foreignField:'_id',
               as:'imgObjs'
           }
       }
    ],(err,res)=>console.log(res))
}

--------编辑--------------------------------------------

我在我的服务器行为中发现了一些非常奇怪的东西。当我执行一个简单的findById调用时,我的image项是一个Objectid数组。但是当使用聚合时,ObjecIds变成了String。有人知道上面是什么吗?

共有1个答案

令狐宏伟
2023-03-14

您需要将字符串转换为对象ID(或将对象ID转换为字符串)。

对于Mongo4.0或更高版本

您可以使用$ToObjectid来完成此操作。在您的示例中,您可以在放松后添加$addfields阶段:

{
  $addFields: {
    imgIdObjId: { $toObjectId: $imgIds }
  }
}
{
  $lookup:{
    from:'images',
    localField:'imgIdObjId',
    foreignField:'_id',
    as:'imgObjs'
  }
}
 类似资料:
  • 我使用Nodejs和MongoDB与expressjs和mongoose库,创建一个具有用户、文章和评论模式的博客API。下面是我使用的模式。

  • 我知道拆分字符串并使用运算符是可能的,但我想知道是否可以使用字符串比较轻松地完成。

  • 主要内容:aggregate() 方法,管道MongoDB 中的聚合操作用来处理数据并返回计算结果,聚合操作可以将多个文档中的值组合在一起,并可对数据执行各种操作,以返回单个结果,有点类似于 SQL 语句中的 count(*)、group by 等。 aggregate() 方法 您可以使用 MongoDB 中的 aggregate() 方法来执行聚合操作,其语法格式如下: db.collection_name.aggregate(aggr

  • 我很难相信这个问题还没有在某个地方被问到并回答过,但我找不到任何它的痕迹。

  • 我在mongodb 4.0中使用Spring(boot)数据2.2.7。我已经设置了3个集合,试图通过聚合查找操作加入这些集合。 目录 股票 操作 目录 映射由 股票 映射由 productId字段引用目录集合中的_id字段 操作 映射由 组件ID字段指的是库存集合中的_id 我想查询操作或库存收集,以检索相应的节点或组件对象列表,该列表由Product.model字段(在目录集合中)排序。) 虽

  • 本文向大家介绍MongoDB查询以查找FirstName和LastName的字段组合?,包括了MongoDB查询以查找FirstName和LastName的字段组合?的使用技巧和注意事项,需要的朋友参考一下 以下是要查询的字段组合查询- 这将产生以下输出-