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