2016-10-22 89 views
2

我已經使用了MongoDB聚合,當我嘗試使用排序和限制時,我得到重複的記錄。用mongodb彙總數據重複

正如你可以看到下面,我有3個文件,並從該document1document2具有相同的標題和document3有不同的視頻節目。

我想按標題對文檔進行分組,並按desc順序對序列劇集中的分組文檔進行排序。

document1document2將在同一組,將獲得獨特的書2,然後現在我想這個document2document3video_view_count排序。

/* document1 */ 
{ 
    "_id" : ObjectId("580afd565706467c1bbabd70"), 
    "serial_episode" : "5", 
    "video_view_count" : 50.0, 
    "video_data" : [ 
     { 
      "video_categories" : [ 
       "Sport" 
      ], 
      "video_title" : "Zwyci??zca", 
      "language_id" : "578f1ec6e494f9400b21fec4" 
     }, 
     { 
      "video_featured_text" : "", 
      "video_categories" : [ 
       "Sport" 
      ], 
      "video_title" : "Zwyci??zca", 
      "language_id" : "578f1ec6e494f9400b21fec3" 
     } 
    ] 
} 

/* document2 */ 
{ 
    "_id" : ObjectId("580afd565706467c1bbabd71"), 
    "serial_episode" : "6", 
    "video_view_count" : 10.0, 
    "video_data" : [ 
     { 
      "video_categories" : [ 
       "Sport" 
      ], 
      "video_title" : "Zwyci??zca", 
      "language_id" : "578f1ec6e494f9400b21fec4" 
     }, 
     { 
      "video_featured_text" : "", 
      "video_categories" : [ 
       "Sport" 
      ], 
      "video_title" : "Zwyci??zca", 
      "language_id" : "578f1ec6e494f9400b21fec3" 
     } 
    ] 
} 

/* document3 */ 
{ 
    "_id" : ObjectId("580afd565706467c1bbabd72"), 
    "serial_episode" : "", 
    "video_view_count" : 11.0, 
    "video_data" : [ 
     { 
      "video_categories" : [ 
       "Sport" 
      ], 
      "video_title" : "Zwyci??zca123", 
      "language_id" : "578f1ec6e494f9400b21fec4" 
     }, 
     { 
      "video_featured_text" : "", 
      "video_categories" : [ 
       "Sport" 
      ], 
      "video_title" : "Zwyci??zca123", 
      "language_id" : "578f1ec6e494f9400b21fec3" 
     } 
    ] 
}   

Expexcted輸出:

我想要的結果與document3然後document2因爲docuemnt1-2是組合在一起,產生一個潮頭document2docuemnt2有最新的插曲。 我需要比較document2document3視頻查看次數:

/* document3 */ 
{ 
    "_id": ObjectId("580afd565706467c1bbabd72"), 
    "serial_episode": "", 
    "video_view_count": 11, 
    "video_data": [ 
     { 
      "video_categories": [ 
       "Sport" 
      ], 
      "video_title": "Zwyci??zca123", 
      "language_id": "578f1ec6e494f9400b21fec4" 
     }, 
     { 
      "video_featured_text": "", 
      "video_categories": [ 
       "Sport" 
      ], 
      "video_title": "Zwyci??zca123", 
      "language_id": "578f1ec6e494f9400b21fec3" 
     } 
    ] 
}, 
/* document3 */ 
{ 
    "_id": ObjectId("580afd565706467c1bbabd71"), 
    "serial_episode": "6", 
    "video_view_count": 10, 
    "video_data": [ 
     { 
      "video_categories": [ 
       "Sport" 
      ], 
      "video_title": "Zwyci??zca", 
      "language_id": "578f1ec6e494f9400b21fec4" 
     }, 
     { 
      "video_featured_text": "", 
      "video_categories": [ 
       "Sport" 
      ], 
      "video_title": "Zwyci??zca", 
      "language_id": "578f1ec6e494f9400b21fec3" 
     } 
    ] 
} 

當前聚合操作:

// Grouping that I have implemented 
var group = { 
    "$group": { 
     "_id":" $video_data.video_title", 
     "video_rating" : { $first:" $video_rating" }, 
     "serial_episode" : { $first: "$serial_episode" }, 
     "video_view_count": { $first: "$video_view_count" }, 
    } 
}; 

// Aggregate function to get that videos  
videos.aggregate([ 
    { $match: { "video_data.video_categories": query.category_name } }, 
    { $unwind: "$video_data" }, 
    { $sort: { video_view_count: -1 } }, 
    { $sort:{ serial_episode: -1 } }, 
    group, 
    { $sort:{ video_view_count: -1 } }, 
    { $skip: skipData }, 
    { $limit: 10 } 
], function(error, output){}); 
+0

什麼是您的示例文檔,樣本中您的預期輸出是什麼?你能用這兩件事來更新你的問題嗎? – chridam

+0

是的,當然,我已更新我的問題,請現在檢查 –

+0

彙總這些樣本文檔的預期輸出是什麼? – chridam

回答

0

你爲什麼退繞..? 取消展開,它會將文檔與陣列長度相乘。

+0

我有放鬆,因爲我有對象數組中的數據。像 {_id:1234655, video_view_count:0 video_data:[ { VIDEO_TITLE: 「你好」 }, { VIDEO_TITLE: 「HI」 }] } –

+0

我認爲這個問題是與您的數據。 。在文檔1中沒有「video_title」字段使用$ exists –

+1

你能告訴你從你的查詢中得到什麼樣的信息 –