Я использовал агрегацию 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){});
Каковы ваши типовые документы и каков ваш ожидаемый результат из образца? Можете ли вы обновить свой вопрос этими двумя вещами? – chridam
Да, конечно, я обновил свой вопрос, пожалуйста, отметьте сейчас –
Каков ваш ожидаемый результат от агрегирования этих образцов документов? – chridam