2016-09-28 62 views
1

我有以下的文檔結構對象的數組:

{ 
    _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

不,沒有關於https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/的例子。我需要爲每個單獨的對象分配「as」參數。他們將其分配給主文檔。 – user2891491

回答

2

您可以在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或更高版本(在數組的$ lookup之前不允許),您可能不需要第一個$ unwind階段。