2016-10-22 3 views
2

Я использовал агрегацию MongoDB, и когда я пытаюсь использовать сортировку и ограничение, я получаю дубликаты записей.Дублирование данных с агрегацией mongodb

Как вы можете видеть ниже, у меня есть 3 документа, из которых document1 и document2 имеют одинаковое название, а document3 имеет другое название видео.

Я хочу группировать документы по названию, а также сортировать сгруппированные документы по серийному эпизоду в порядке убывания.

document1 и document2 будет находиться в той же группе и получите уникальный документ2, а затем теперь я хочу, чтобы разобраться в этом document2 и document3 с video_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 являются группа вместе, чтобы произвести document2 и стоимость создания эксклюзивной docuemnt2 имеет последний эпизод. Мне нужно сравнить document2 и document3 для видео количества просмотров:

/* 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» use $ exist –

+1

Можете ли вы рассказать, что вы получаете от вашего запроса –

Смежные вопросы