Anonymous
у вас там действительно лишние скобки + к этому попытка сравнения по строке в случае дефолта
Что назначить для min и max для дефолта? 0 не подойдёт, вероятно. Хотел, чтобы в запросе к базе min и max при их отсутствии в запросе игнорировались, т. е. выводились записи с любым полем price.
Dmitriy
тогда у вас запрос не правильно составлен, сейчас вы фактически делаете price >= '' && price =< ''
Dmitriy
в математике такое обычно не работает, хотя готов допустить, что это возможно
Dmitriy
вам выше ответили и даже код привели как будет проще всего реализовать это
Dmitriy
если такой вариант не подходит, то можете через $or сделать условие, но на мой вкус вариант выше лучше
Mike
там только валидацию данных я не добавил
Mike
но думаю эль анонима сам справится
Anonymous
там только валидацию данных я не добавил
Валидация там нужна? Там,вроде, проверяется наличие параметров.
Mike
Валидация там нужна? Там,вроде, проверяется наличие параметров.
ну тебе с клиента может что угодно придти же, нельзя сразу все в запрос пихать
Dmitriy
Валидация там нужна? Там,вроде, проверяется наличие параметров.
а если вам в price придет инъекция (хз есть ли такое для монги, но думаю, что придумали)
Mike
Валидация там нужна? Там,вроде, проверяется наличие параметров.
я тебе могу прислать ?req.params.name_filter=[][][][]&min==kuku&max=keke
Anonymous
Ok. Как мне сделать, что при отсутсвии параметров в запросе соответствующая часть запроса игнорировалась? Скажем, нет max, ищем только по name_filter и min.
Mike
я же тебе привле код
Dmitriy
именно по вашему запросу
Anonymous
Какая валидация нужна в примере выше? Пo typeof ?
Mike
там просто проверку расширь не просто if(req.params.max) - это пропустит если данный параметр есть . До if(req.params.max&& isNumber(req.params.max))
Anonymous
Спасибо.
Mike
Спасибо.
там только внимательнее потому что typeof '4' = "string"😂
Mike
С валидацией перемудрил 146%
Anonymous
Проверка isNumber не существует в JS, поэ\тому написал её так: const isNumber = value => { if (typeof value !== 'number') { return false; } if (value !== Number(value)) { return false; } if (Number.isFinite(value) === false) { return false; } return true; };
Dmitriy
парни а в js не существует готовых либ для красивой валидации? вы всегда во всех проектах городите вот такое? 😳
Mike
Там стандарта нет как это делать
Mike
Мильон способов есть
Yʉri 🇺🇦
Aleksandr
Валидация это вполне самостоятельная тема, не связанная с монго
Anonymous
Сделай просто если >0 то возвращай True. Если конечно это по тз
unknown top level operator: $regex. Попробовал query['name']['$regex'] = req.params.name_filter, получил Cannot set property '$regex' of undefined.
Anonymous
Вроде, починил. if (req.params.name_filter && typeof req.params.name_filter === 'string') { query['name'] = {}; query['name']['$regex'] = req.params.name_filter; }
S
нормальная практика во всех коллекциях указывать timestamp?
Nick
нормальная практика во всех коллекциях указывать timestamp?
если нужно работать со временами то да. зависит от бизнесс задач текущих и будущих, котоыре могут появиться
Dmitriy
нормальная практика во всех коллекциях указывать timestamp?
да, я обычно указываю минимум 2 временных метки: создание и обновление
S
благодарю парни
Андрей
Всем привет. Посоветуйте толковые ресурсы по MongoDB
Daniil
Всем привет. Посоветуйте толковые ресурсы по MongoDB
https://docs.mongodb.com/manual/tutorial/getting-started/ сверху вниз все вдумчиво прочитать хотя бы один раз и уже неплохо будет
Сергей
те кто интересовался моим трудоустройством)) мне даже не ответили:D
Mike
ну вот
Сергей
ага
Сергей
забыл отписать
Anonymous
Все спасибо за участие, текущий шаг работает.
Anonymous
Прочитал о Монго. "хотя в самой свежей версии даже сделали транзакции, там они похоже, весьма неполноценные, то есть не умеют например ждать друг друга". Это так?
Stanislav
Всем привет. подскажите, как правильно сделать отказоустойчивость mongos ? я поднял шардированный кластер, поднял cfg сервера, поднял mongos, на который ходят приложения, но пишут что его нельзя просто так отскалировать. как быть? ставить по монгосу на кадое приложение?
Dmitriy
Прочитал о Монго. "хотя в самой свежей версии даже сделали транзакции, там они похоже, весьма неполноценные, то есть не умеют например ждать друг друга". Это так?
да, где-то это чуть выше объяснял @dd_bb. основной вопрос в том нужны ли вам транзакции в принципе и еще более основной зачем вам ожидание транзакции и почему вы не можете это решить архитектурно через очередь?
Dmitriy
может я скажу глупость, а если отдельную коллекцию создать где транзакции хранить? ну по ключу и статусу
можно и так, но мне не очень очевидно желание сделать очередь на базе данных. когда для этого есть прекрасные внешние решения на любой вкус, начиная от rabbitmq и заканчивая kafka
Dmitriy
но это не по теме чата)
Dmitriy
ну как временное решение же может подойти
после 15 лет в IT я могу с полной уверенностью утверждать, что шутка про, то нет ничего более постоянного чем временное решение - это не шутка))))
Dmitriy
тем более вам на уровне базы данных надо свой конвеер пилить и следить за стейтами. зачем, когда все это можно дешевле сделать
yopp
Это ACID транзакции
yopp
Да, в монге исторически нет блокировок, но это не к транзакциям вопрос
yopp
В смысле user defined блокировок
yopp
А в mongoexport можно фильтр накладывать, то есть например записи только за сегодня?
Да: https://docs.mongodb.com/manual/reference/program/mongoexport/#cmdoption-mongoexport-query
Slavik
Подскажите пожалуйста, есть документ с полями: startDate, endDate, status. Хочу менять status если startDate < now Date, и так же менять если дата конца проходит. Как это правильно сделать?
Ilya
Да, в монге исторически нет блокировок, но это не к транзакциям вопрос
мне кажется, имелось ввиду другое, что в случае возникновения конфликта записи, в том случае, если сначала данные изменились транзакционно, а потом не-транзакционно до коммита, транзакция будет ждать 60 секунд, а потом выкинет TransientTransactionError
Slavik
update с условием и $set
Настраивать cron job или есть другие способы для этого?
Dmitriy
Настраивать cron job или есть другие способы для этого?
cron самый простой, еще как вариант изврата ttl индекс и вотчер, но это оверхэд)
Ilya
сомневаюсь. для тех кто привык к тому как устроены транзакции в табличных хранилищах, отсуствие блокировок сильно кусает про ваш случай не понял
Я имел ввиду следующую ситуацию: await session.withTransaction(async () => { await testcoll1.updateOne({id: 1}, {$inc: {filed1: 10}}).session(session) // №1 await testcoll1.updateOne({id: 1}, {$inc: {filed2: 20}}).exec() // №2 }, transactionOptions) В этом случае выполнение второго запроса №2, застопорится. Ни №1, ни №2 не выполнятся, пока не пройдет 60 секунд(макс время транзакции), после чего выполнится №2, а транзакция попытается еще раз выполниться.
Ilya
Я точно не знаю, может быть есть способы решить эту проблему? Потому что для меня это существенный недостаток, приходится разделять данные на 2 коллекции (те, которые изменяются в транзакциях, и все остальные), чтобы таких вот казусов не возникало.
Dmitriy
я хз, не очень понимаю что вы по коду делаете, зачем обновление полей внутри одного документа делить на 2 запроса впринципе. но выглядит так, что вам в принципе не нужна в приведенном случае транзакция, а нужен findAndModify, внутри себя атомарный.
yopp
я не вижу чтоб вы транзакцию комитили
yopp
т.е. да. №2 будет делать retry внутри пока не закончится maxtimems
yopp
но я так понимаю у вас в коде дедлок получается
yopp
потому что вы внутри контекста открытой транзакции ждёте выполнение операции которая зависит от тразакции
yopp
по этому и №1 не комиттится
yopp
вам нужно вынести операцию из конекста транзакции
Ilya
я хз, не очень понимаю что вы по коду делаете, зачем обновление полей внутри одного документа делить на 2 запроса впринципе. но выглядит так, что вам в принципе не нужна в приведенном случае транзакция, а нужен findAndModify, внутри себя атомарный.
Это просто абстрактный пример. Допустим, у меня есть документ пользователя системы. Этот пользователь может совершать как транзакционные операции (авторизация, деавторизация, покупка товаров и.т.д.), затрагивающие его документ, так и обычные операции вне транзакции. И вот что, если транзакционная операция и не-транзакционная будут выполнятся в один момент, и возникнет такая ситуация? У него все подвиснет, как минимум. Не знаю, я просто пытаюсь учесть все возможные варианты, когда что-то может пойти не так, и это меня беспокоит.