Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 在对象数组中使用$lookup_Mongodb_Mongodb Aggregation - Fatal编程技术网

Mongodb 在对象数组中使用$lookup

Mongodb 在对象数组中使用$lookup,mongodb,mongodb-aggregation,Mongodb,Mongodb Aggregation,我的文档结构如下: { _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 fu

我的文档结构如下:

{
  _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聚合是否可能实现这一点?

假设包含详细信息的集合是video.details,并且您加入的字段是_id:


因此,基本上您要进行查找,但稍后在$group阶段中,以您喜欢的方式构建输出。如果您使用的是MongoDB 3.3.4或更高版本,那么您可能不需要第一个$unwind阶段,之前不允许对阵列进行$lookup

如果包含详细信息的集合是video.details,您可以在MongoDB 3.2中使用类似这样的内容,并且您要加入的字段是_id:

因此,基本上您要进行查找,但稍后在$group阶段中,以您喜欢的方式构建输出。如果您使用的是MongoDB 3.3.4或更高版本,那么您可能不需要第一个$unwind阶段,之前不允许对阵列进行$lookup

没有,这方面没有例子。我需要指定as参数,这样每个对象都可以。他们把它分配给主文档。不,没有这个例子。我需要指定as参数,这样每个对象都可以。他们将其分配给主文档。
[  
   {  
      $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"
            }
         }
      }
   }
]