【问题标题】:Use $lookup in an array of objects [duplicate]在对象数组中使用 $lookup [重复]
【发布时间】:2017-02-07 01:06:10
【问题描述】:

我的文档结构如下:

{
  _id: 123,
  name: 'My playlist',
  videos:[
   {videoId:1},
   {videoId:2},
   {videoId:3}]
}

现在我想在视频集合中做一个$lookup 来获取所有视频数据。最后,我需要一个这样的数据结构:

{
  _id: 123,
  name: 'My playlist',
  videos:[
   {videoId:1, videoDetails:[{_id:1, title:'My funny video', views:123}]},
   {videoId:2, videoDetails:[{_id:2, title:'My new video', views:1234}]},
   {videoId:3, videoDetails:[{_id:3, title:'Another video', views:1236}]}]
}

这对于 MongoDB 3.2 和 $lookup 聚合是否可行?

【问题讨论】:

标签: mongodb mongodb-aggregation


【解决方案1】:

假设包含详细信息的集合是 video.details 并且您要左连接的字段是 _id,您可以在 MongoDB 3.2 中使用类似的方法:

[  
   {  
      $unwind:"$videos"
   },
   {  
      $lookup:{  
         from:"video.details",
         localField:"videos.videoId",
         foreignField:"_id",
         as:"details"
      }
   },
   {  
      $group:{  
         _id:"$_id",
         name:{  
            $first:"$name"
         },
         videos:{  
            $push:{  
               videoId:"$videos.videoId",
               videoDetails:"$details"
            }
         }
      }
   }
]

所以基本上你会进行查找,但稍后在 $group 阶段以你喜欢的方式构建输出。如果您使用的是 MongoDB 3.3.4 或更高版本,则可能不需要第一个 $unwind 阶段(之前不允许对数组进行 $lookup)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 2021-03-10
    • 2019-04-28
    • 2020-09-14
    • 2021-10-24
    相关资源
    最近更新 更多