我有以下文件结构:
{
_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
汇总吗?
答案 0 :(得分:3)
你可以在MongoDB 3.2中使用类似的东西来做这件事,假设具有详细信息的集合是video.details
,而你所加入的字段是_id
:
[
{
$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之前)。