Документ и объяснение
"_id":"5cf54fdf146bd8a8e8002fb4",
"id":2,
"updated_at":"2019-06-03 16:51:16",
"created_at":"2019-06-03T16:50:39.000Z",
"field1":[
249,
249
],
"field2":[
310,
310
],
"evo":{
"evot01":[
222222,
220318
],
"evot02":[
3199,
3199
],
"evot03":[
686,
686
],
"evot04":[
1324,
1324
]
},
"exp":{
"exp1":[
16394716,
16394716
],
"exp2":[
19567492,
19567492
],
"exp3":[
25616528,
25616528
]
},
"power":[
55,
57
],
}
Я храню некоторые данные для каждого пользователя, и я хотел бы составить верхнюю сводку по полю с ограничением.
Case
Создание списка из 5 лучших записей для evo.evot01
, каждый пользователь может иметь различное количество значений внутри, поэтому я использую слайс, чтобы получить последний добавленный.
Вопрос
Возможно ли как-нибудь создать запрос, который включит в меня документ с «field1» и любой другой по моему выбору - может быть несколько: смассив топ-5 записей для каждой «категории», или он должен быть отдельным?
Возможные проблемы - настройки, моя попытка
агрегированный запрос в моем документе -«Найти во всех документах последнее значение в массиве», отсортировать его по убыванию и ограничить результат X »
[
['$project' => [
'evo1' => [
'$slice' => [
'$evo.evot01', -1
]
],
'_id' => '$id'
]
],
['$sort' =>
['evo1' => -1]
],
['$limit'=>5]
],
Сначала я попытался сгладить результат $slice
, но безуспешно, примержелаемый результат: https://imgur.com/a/6ClhU4x, но по-прежнему не хватает отображения результатов нескольких категорий.
Спасибо за любые подсказки - отказ от ответственности - я использую MongoDB в PHP laravel. Но я могу легко адаптировать raw mongoзапрос к моим потребностям.