Hopf
😁
FSM
Ребятки, есть документ в монге, в нем n-ое количество элементов, у каждого из которых есть поле "rating". Как одним запросом/аггрегацией обновить поле "place" у каждого из элементов, показывающее порядковый номер в упорядоченном по полю "rating" списке? Не хотелось бы в питоне перебирать данные каждый раз
ghett
https://stackoverflow.com/jobs/companies/kink кинку нужен мастер монги посоны
FSM
вот если честно, то у меня когнитивный диссонанс. Я не понимаю что ты подразумеваешь под элементом. А лучше приведи пример документа
надо из такого [ {"_id":123, "name":"name1", "rating":12}, {"_id":124, "name":"name2", "rating":45}, {"_id":125, "name":"name3", "rating":31}, ] получить такое [ {"_id":123, "name":"name1", "rating":12, "place": 3}, {"_id":124, "name":"name2", "rating":45, "place": 1}, {"_id":125, "name":"name3", "rating":31, "place": 2}, ] основываясь на величине "rating"
FSM
надеюсь, правильно написал
Мечтатель
теперь понятно
Мечтатель
но это не элементы документа, а элементы какого-то поля
FSM
ну массив элементов - это и есть документ, разве нет?
Мечтатель
нет
FSM
а не, это коллекция
Мечтатель
документ - это ключ-значение
FSM
во, это документы коллекции, так?
FSM
ну что поделать
ghett
муравью елду приделать
FSM
муравью елду приделать
а толку, если у них только матка размножается
Мечтатель
блин чувак.....))) коллекция состоит из документов документы - это совокупность пар ключ-значение значение может быть тоже документом, точным значением или массивом, который состоит из элементов, которые могут быть тоже документами, массивами или константами
ghett
свойство ключа
ghett
я нихера не шарю в монге
ghett
но умничаю как примитивный фронтендщик
ghett
потому что об объектах js всё это, не?
K
$rows = $manager->executeQuery($config['mongo_collection'], new \MongoDB\Driver\Query( ['created' => [ '$gt' => $start, '$lt' => $stop ]], ['limit' => 10000] ) ); Почему лимит не работает?
SvPupok
рассматривай коллекцию, как таблицу с одним полем, каждая строка которой представляет собой документ
Мечтатель
извини, я сейчас тебе не помогу , так как перенервничал из-за непонимания вопроса (((
vveare138
М А П Р Е Д Ь Ю С А П Р Е Д Ь Ю С
FSM
я бы как заправская вебмакака запустил бы цикл через вайл или иф
если учесть, что таких запросов будет по сотне в секунду, сервер не скажет "спасибо"
Мечтатель
если учесть, что таких запросов будет по сотне в секунду, сервер не скажет "спасибо"
пока что могу точно сказать что эту аггрегацию написать несложно.
ghett
в этом цикле я бы перебирал свойства ключа rating каждого и вставлял бы его в общий временно созданный массив. Если значение больше предыдущего то вставлять в начало, если меньше то в конец. Потом можно находить ключ по числу из свойства и прописывать индексный номер из массива как позицию)))
ghett
а задача показывать дашборборд лидеров с позицией или какая вообще задача?
я бы сравнивал это всё динамически на фронте при выдаче
Мечтатель
Я бы изначально хранил сортированный массив..... И юзать индексы элементов. тогда даже не прийдется хранить поле place
FSM
а задача показывать дашборборд лидеров с позицией или какая вообще задача?
если запрос будет быстрый - то каждый раз позицию получать, если медленный - то на каждый эвент обновления позиции, проставлять рейтинг заново
ghett
почти да
ну да, использовать массив как палку для слепого - святое дело
ghett
вопрос в том, что тебе нужно, какая частота обновления рейтинга?
FSM
Я бы изначально хранил сортированный массив..... И юзать индексы элементов. тогда даже не прийдется хранить поле place
такой вариант тоже найс, но нужен скрипт, который будет переставлять места, если рейтинг поменяется
Nick
остановитесь
ghett
нихрена не понял (
ну я так себе это представляю, что скрипт по сути слепой, а массив для него как некий способ на ощупь определить куда идти
Nick
сама суть задачи какая? что нужно сделать
vveare138
модерн софтвеа девелопмент аз из
vveare138
что это такое?
Nick
задача - это например показать дашборд лидеров
vveare138
откуда ты это берёшь?
Nick
а не то что вы там себе придумали
FSM
это я так изобразил БД в монге)
vveare138
изобрази нормально
FSM
а точнее коллекцию
ghett
типо того, если учесть метафиричность выссказывания )
я просто не первый раз такой подход использую, считал что я сраная веб-макакая, и тут оказывается что или я не один, или ты тоже вебмакака коль согласен с таким подходом
vveare138
как должно быть
Nick
ок, не хотите помощи мучайтесь сами
ghett
и колличестве позиций
Nick
вопрос в частоте обновления
вопрос в том что вам нужно
vveare138
как будто с ботами говорю
ghett
ок, не хотите помощи мучайтесь сами
не не, давай свой вариант, тут пока ступор
vveare138
вы обьяснить даже не можете
Nick
то что гдето там приведено необходимое преобразование это не задача, это непонимание основной задачи
vveare138
+
FSM
@ghett хз сколько там будет запросов в секунжу, но на кой смысл писать говнокод, если можно сразу норм сделать
vveare138
Nick
прежде чем определять количество запросов нужно определить саму возможность выполнимости задачи
FSM
есть коллекция, в ней есть документы, нужно в один запрос/аггрегацию в каждом документе обновить/добавить поле "place", отражающее его позицию в отсортированной по полю "rating" коллекции
vveare138
где ты потом будешь использовать этот place?