Arystan
я через поля ввожу
Araik
https://www.youtube.com/watch?v=ITHpBscGSTM&feature=youtu.be
Araik
только что начался
Slava
Всем привет! Подскажите пожалуйста, есть ли возможность на ходу посчитать количество совпадений из массива positions и отсортировать результаты по их значению? filters: { positions: [String] } Что значит “посчитать количество совпадений” - от клиента приходит аналогичный массив позиций, которые точно есть в свойсте positions коллекции filters, дальше идет сравнение через оператор $in: $find: { positions: { $in: clientPositions } }
Slava
сортировать нодой после получения всех позиций - не вариант, допустим позиций миллион
Oleg
привет. какого типа может быть _id? может ли быть он составной, быть кортежом?
Slava
Есть какой-нибудь гайд по агрегациям?
Daniil
Есть какой-нибудь гайд по агрегациям?
https://docs.mongodb.com/manual/core/aggregation-pipeline/ Ну и там дальше по доке
Slava
ток теперь появился вопрос популэйшена, как это сделать так же просто, как с функцией .populate, но думаю разберусь)
Slava
и пока что не знаю на сколько ускорится производительность от данного процесса, до этого все эти действия делал нодой. Щас проверю и отчитаюсь
Slava
а есть инфа у кого-нибудь как сделать populate в aggregate? вот есть у меня поле position: _id, как мне его популизировать? С помощью $lookup возвращается массив. Единственный способ это лукапить и брать первый элемент из массива? Или есть какие-то нормальные способы?
Ilya
Господа, а ведь в монге можно полноценно js функции писать, верно? Может есть и примеры, где вся логика бэка реализована непосредственно на монге?
Ilya
Все понял, спасибо
Daniyar
ребят можно populate до функции find сделать?
Slava
а в чем смысл?
Slava
насколько мне известно - можно
Николай
ребят можно populate до функции find сделать?
а тебя несложно найти) https://www.linkedin.com/in/daniyar-changylov-a20101161/
Daniyar
короче надо найти по property of object который находится в объекте... но lookup в aggregate занимает очень много памяти
Artem
Приветствую! Хочу спроектировать базу для ресторана. Сложность в том как организовать позиции, например пицца, суп, напитки и тд. у них есть общие данные, например цена, название, описание, и есть отличающиеся, например у пиццы разные бортики и размеры. И как потом их с заказом связывать. Я вообще фронтендер, и собственно вопрос такой, что почитать, куда посмотреть, что-бы максимально быстро разобраться как что правильно делать? Года три назад уже работал с монго, но тогда была задача проще, да и не помню уже ничего.
Daniyar
ну юзай elemMatch
просто проблема следующая: когда пытаюсь работать с nested object(который только ссылается), я не могу работать с его данными, извесно только его id
Slava
ну это грубо говоря
Slava
ну так ты мб сначала получи айдишники всех коллекций что тебе надо и уже потом по ним ищи
Slava
получи их с помощью отдельных запросов в монгу
Slava
ну понятно что не всегда есть возможность)
Artem
храни коллекции жрачки а для каждого меню позицию, в которой указана жрачка и дополнительные свойтсва
А есть какой-то юи где можно удобно смоделировать всё (документы и их связи), что-бы лучше в голову уложить перед кодингом?
Slava
в закрепах че-то было
Daniyar
ну понятно что не всегда есть возможность)
а что если типа найти все, спопулизировать, а потом через exec function фильтровать?
Slava
А есть какой-то юи где можно удобно смоделировать всё (документы и их связи), что-бы лучше в голову уложить перед кодингом?
кстати я возможно не лучший совет тебе дал, потому что мб не правильно понял, поэтому можешь попыаться сформулировать вопрос лучше. но мб и правильно)
Slava
а что если типа найти все, спопулизировать, а потом через exec function фильтровать?
ну ты можешь и так делать, но возьми утопичную ситуацию, когда у тебя миллион записей. тогда у тебя сервер повиснет
Slava
значит юзай лукап правильно, ничего он жрет, он даже меньше чем популэйт забирает
Daniyar
Slava
Знаешь короче че щас нарыл. Ты популэйт не можешь заюзать без какой-то коллекции собранной уже. Ну короче можешь сделать так: collection.populate(collection.aggregate(…), options); А так как тебе нужно только по ожному какому-то полю искать, то сделай лукап только на него
Slava
ну типа вынеси результаты в отдельное поле и по-нему строй уже логику
Slava
а кто-нибудь шарит как $count вынести в отдельное поле, а остальные результаты в другое?
Slava
возможно через $facet как-то можно
Daniyar
Знаешь короче че щас нарыл. Ты популэйт не можешь заюзать без какой-то коллекции собранной уже. Ну короче можешь сделать так: collection.populate(collection.aggregate(…), options); А так как тебе нужно только по ожному какому-то полю искать, то сделай лукап только на него
короче до сегодняшнего дня я добавлял какое-нибудь property nested object в его парент при создании... и уже по нему в дальнейшем работал... но если обновят child object то видимо надо будет делать updateMany для всех его родителей которые используют его...
Slava
👍
Daniyar
не совсем понял. Типа ты не делал отдельные коллекции, а хранил все объектами для каждого отдельно экземпляра?
нет.. отдельные коллекции.. просто если используются вместе, то даю какое-то ключевое значение паренту
Slava
ну тогда да
Slava
но это гемор)
Slava
через $project?
ща попробую
Slava
слушай, так $project он же по-моему не дает новых полей создавать, а просто делает выборку из существующих? или я че-то не так понял
Slava
а не, походу я наглый лжец
Daniyar
но это гемор)
ну да...а что делать, прочитал вот это и немного расстроился https://stackoverflow.com/questions/19937524/mongoose-how-to-query-for-a-referenced-object-property
Daniyar
еще есть
Slava
$addFields
ну это понимаешь будет добавляться поле к каждому совпадению, а мне нужно чтобы было результрующее количество, которое получается стэйдж операцией “count"
Slava
но на самом деле во многом удобнее sql
Slava
ну и во многом неудобнее)
Daniyar
а что конкретно надо сделать?
Nick
ну да...а что делать, прочитал вот это и немного расстроился https://stackoverflow.com/questions/19937524/mongoose-how-to-query-for-a-referenced-object-property
конкретно здесь неправильный порядок, нужно делать выборку сторей и к ней вязать элемент - стандартный касяк
Nick
есть А и Б, если у вас условие относится к Б, то надо делать выборку из Б и к нему подгружать (лукап) объекты из А, а не наоборот