Veaceslav
byId, one тоже
yopp
плохо разбираюсь в ноде и нюансах монгуса. вы ответы в коллбэках получаете? или синхронно ждете результата?
Veaceslav
Точнее даже не запросы в операций
Nick
просто напросто используя монгус не нужно использовать findAndModify
Nick
перепишите по номральному
Nick
find object change object save object
Gor
вообщем дело в промисах и моделях в mongoose
Gor
https://stackoverflow.com/a/49374860/6322612
Gor
это чисто для истории
Gor
там await добавить надо было
Nick
всеравно используйте нормальную работу с монгусом
Gor
всеравно используйте нормальную работу с монгусом
ну монгуз подходит для тех, кто хочет работать с колекциями через модели и "виртуализировать" доступ к данным.
Gor
а не на "низком" уровне чистых запросов
Nick
подходит, но люди вот не видят разницы в использовании стандартного метода save и применения ручного findAndUpdate
yopp
проблема только в том, что монгуз ужасен
yopp
языки запросов это вынужденное зло. это бага, а не фича. вместо работы с данными, приходится разбираться в абсолютно ненужном уровне абстракции, со своей логикой, со своими задачами и со своими приколами ODM частично решают эту проблему, позволяя сфокусировать на моделировании данных, вместо прожигания времени на фигню
Veaceslav
Господа а как правильнее сделать. Мне нужно удалить товар, но по факту его как бы не нужно удалять, а только спрятать, а то мало-ли нужно будет посмотреть его потом... Есть две идей: Поставить isRemoved: true либо переместить его в другую колекцию, где будут все товары которые удалил ...
Veaceslav
Что будут лучше по вашему мнению ?
Bandikoot
Veaceslav
removedAt с таймштампом
А потом всем запросам добавить removedAt: null ?
Veaceslav
Ну то есть что бы не искал по товарам которые как бы удалили уже
Bandikoot
надо бы проверить, будет ли цеплять документы с null при условии поиска $lt : new Date()
Bandikoot
это чуть более замороченный вариант, но зато даёт некоторую гибкость
Veaceslav
из этих двух лучше первый
А как искать их потому ? У меня есть find(args) ? Как сюжа воткнуть, еще и isRemoved: false
Veaceslav
Есть запрос: find(args) args = это те поля который пришли с фронта как сюда воткнуть еще и isremoved: false ? что бы выдовал только те которые не удаляли
Veaceslav
мм, не очень понял вопрос
Что-то вроде: return ProductModel.find(args, {isRemoved: false})
Veaceslav
Только это не работает ))) видимо прям очень не правельный запрос я сделал )
Bandikoot
вам нужно прямо в args вставить это условие
Veaceslav
args.isRemoved = false;
Veaceslav
Сделал так, до find(args)
Veaceslav
будет норм или не очень ?
Bandikoot
какой там у args тип? попробуйте, я прост с js не особо знаком
Veaceslav
какой там у args тип? попробуйте, я прост с js не особо знаком
Так работать будет, вопрос в том если так нормально будет или костыль ))
Bandikoot
ну если на фронте сразу условие добавить не вариант, то что тут ещё придумать? (:
Bandikoot
хотя пожалуй логичнее это в фукнции бэкенда и оставить
Veaceslav
хотя пожалуй логичнее это в фукнции бэкенда и оставить
Вот именно. Пусть бэк это делает, что бы точно эти товары не достали ))
Veaceslav
А то будет прикол что клиент вроде удалил товар, а тут бац фронт его показывает ))
Illia
Здравствуйте, подскажите regex поиск по определенному полю можно проиндексировать как Text search?
Nick
регексп ускоряется от индексов только если у вас регулярка включает символ начала строки
Nick
https://docs.mongodb.com/manual/reference/operator/query/regex/#index-use
Illia
регексп ускоряется от индексов только если у вас регулярка включает символ начала строки
Другого способа ускорить нету ? У меня проблема,поиска,текст ищет но только слово целиком а рэджэкс классно отрабатывает но только по одному полю и в начале долго отрабатывает ((
Nick
в монге нет фултекст серча, если он вам нужен выбирайте чтото специализированое, либо както подстройтесь под возможности монги
Nick
Вот изза жалкого подобия я всем и говорю что фултекста нет
Alexander
ну, за неимением лучшего, приходится довольствоваться тем, что есть
Alexander
хотя... можно попробовать навесить на pre.save какой-нибудь soundex и потом попробовать по массиву с индексом искать. хмм...
Gor
Full text search😄
контекст. он отделен от поиска по другим полям или необходимо выборку записей ТОЛЬКО по full text search
Gor
а так же подрузамевается ли partial match или только полное вхождение слова
Illia
а так же подрузамевается ли partial match или только полное вхождение слова
Ну вот text search из коробки работает норм в плане скорости,но ищет только целые слова,вот если бы он умел как регекс или регекс умел бы как text search...как-то так, хоть бери и скрещивай их 😊
Gor
если поиск идет только $text - выноси. вот к чему спрашивал
Gor
regex будет с тормозами. там еще есть варианты конечно но зависит от деталей поиска
Roman
Добрый день, подскажите пожалуйста, как построить запрос. У всех документов есть поле с массивом id-шников, как найти все документы в массив которых не входит определенный id?
Nick
{$nin:[]}
Roman
но если я правильно понимаю, то это наоборот, найти документ с id, который не входит в определенный массив
Nick
почитайте доку и вопросы отпадут
Roman
db.getCollection('questions').find({ whoAnswered : { $regex : someId }}) вот это подошло, спасибо
Nick
и как это вяжется с " в массив которых не входит определенный id" ?
Serhii
1.5 ляма ошибок, из-за чего могут возникать эти тайм ауты, кто сталкивался? Увелечение тайм аута может как-то пофиксить такую беду? Версия монгуса 4.9.2
Serhii
Serhii
Ivan
у MongoDB driver 3.0.11v (который юзает Mongoose) отлавливаливается connection cursor timeout после обновления до 3.1.13 - проблемы нету то есть можете побробовать обновить Mongoose
Ivan
попробуйте, в этому случае нужно будет до MongoClient добавить useNewUrlParser: true
Serhii
попробуйте, в этому случае нужно будет до MongoClient добавить useNewUrlParser: true
а можете обьяснить вообще проблему, откуда ноги растут, потому что я не понимаю
Serhii
а могут тайм ауты возникать из-за того что операции работы с базой данных выполняются на стороне сервака? Причем операции достаточно жирные
yopp
А вы соединение на кажды запрос открываете и закрываете?
Serhii
А вы соединение на кажды запрос открываете и закрываете?
нет, один раз устанавливается соединение при запуске приложения
yopp
а как тогда 1.5млн исключений получается?
Nick
там на скрине прям напиано connection 2401, точно не одно
yopp
есть ощущение что у вас текут соединения и таймауты это следствие утекающих соединений, а не драйвера