Anonymous
chat_id lang menu
Anonymous
Пока что 4 документа в таблице
Anonymous
И то так медленно
Ilya
что то не реальное, это запрос в консоли монги или с клиента? но даже для сетевых задержек какая то жесть
Askhat
By default, a maximum of 10 listeners can be registered for any single event. This limit can be changed for individual EventEmitter instances using the emitter.setMaxListeners(n)
Его просто так я так понимаю не вытащить чтобы установить max listeners
Oleg
Всем привет. Почитал историю канала про WriteConflict's в транзакциях. Пытаюсь написать такой код, чтобы он умел много concurrency транзакций обрабатывать без отмен транзакций. Нашел метод session.with_transaction который первым аргументом принимает функцию-callback . https://docs.mongodb.com/manual/core/transactions/#retry-transaction Работает если параллельно пускаю немного транзакций ~3-5. Если пускать больше транзакций параллельно, то происходит странное: код заверщается без ошибок, но не все документы пишутся в БД. Есть у кого опыт concurrency транзакций в монге?
yopp
просто потому что любая борьба за общий ресурс не может быть concurrent, так как ресурс один, а акторов много
yopp
абстрактно, у вас есть следующие инструменты в порядке уменьшения производительности на write workload: — immutable data / insert only — single document / atomic updates — multi document / transactions
yopp
insert only единственное по настоящему concurrent решение
yopp
если вы подробнее расскажите о своём кейсе, то можно попробовать поискать варианты как решить вашу задачу без транзакций
Anonymous
Как меряете время?
Никак, просто примерно столько жду
Nick
Никак, просто примерно столько жду
Тогда начните измерять каким либо инструментом с нормальным подсчетом времени. Плюс нужно явно разделить этапы отправки запроса в вашу систему от запроса в базу и мерять именно время общения с бд
Nick
Хотя бы банальное логирование времени с милисекундами
Oleg
много concurrency и транзакций это взаимоисключающие требования
Получилось все же отладить код и норм стали concurrency транзакции отрабатывать. просто сессию в одном месте не пробросил..
Oleg
сейчас пуляю по 300 транзакций, у которых есть один общий каунтер, который лочится базой и все ОК отрабатывает.
Oleg
session.with_transaction решает все вопросы, если правильно код написать.
yopp
Для счетчика есть $inc
yopp
Если он не Multidoc
Oleg
этот метод with_transaction на уровне драйвера все конфликты ловит и перезапускает callback
Egor
🤨
Mikhail
Ребят, посоветуйте, как шардированную монгу бекапить?
Mikhail
Я в доке смотрю, там какая-то дичь - отключить всех от монги, залочить запись и каждый шард монгодампом забекапить отдельно
Mikhail
А больше - никак?
Mikhail
...кроме снапшотов ФС и файлового бекапа самих датафайлов монги
yopp
А больше - никак?
Бесплатно, только снепшоты и mongodump. За деньги atlas backups и ops manager
yopp
4.2.1 (Oct 18) ◦ 4.0.13 (Oct 19) Хочешь выступить с докладом на митапе в Москве? Присылай тему! • Плейграунд для запросов • Документация • Официальные курсы по MongoDB Stable: 4.2.1 ◦ Bugfix: 4.0.13 Legacy: 3.6.14 (Aug 26) ◦ EOL: 3.4.23 (Sep 16, 💀 Jan ‘20) По вопросам покупки Enterprise лицензии пишите @dd_bb ☠️: 3.2.21 (Dec ’18), 3.0.15 (May ’17)
yopp
4.2.1 released: https://docs.mongodb.com/manual/release-notes/4.2/#oct-18-2019 4.0.13 released: https://docs.mongodb.com/manual/release-notes/4.0/#oct-19-2019
CrusaderX
@dd_bb скажите, а по курсу, который был ранее, по монге, не будет видео? Платных или нет
Semeon
Многоуважаемый чат! Можете подсказать дизайнеру как правильно написать запрос для «Монги»? Я хочу написать запрос, который бы сортировал записи по дате и подсчитывал среднее значение поле. Вот пример: exports.dailyAverages = function(cb) { db.get().collection(config.collectionConnect).aggregate([ { // Сортировка записей $match: { Date: { $gte: Math.round(new Date().getTime()/1000)+10800-604800 } }}, { // Агрегированией записей $group: { _id: "$_id", LastTimeUpdate: { $last: "$Date" }, Temperature: { $avg: "$Temperature" }, Pressure: { $avg: "$Pressure" } }}, { // Удаление данных из объекта $project: { _id: 0, Date: 0, City: 0, Street: 0 }} ]).next(function(err, doc) { cb(err, doc); }); };
Semeon
Не работает ровным счётом всё. Подобный запрос возвращает объект, но поля не суммируются и кажется, выборка по дате не работает. Можете подсказать, где я не прав?
Semeon
{ "LastTimeUpdate": 1571438304, "Temperature": 27.4, "Pressure": 749.2 } Такой объект возвращается
yopp
{ "LastTimeUpdate": 1571438304, "Temperature": 27.4, "Pressure": 749.2 } Такой объект возвращается
в $group в _id укажите null, иначе у вас получится что-то странное
yopp
по дате ограничьте условие с двух сторон: $gte и $lt, если вы хотите выбрать за период
yopp
и по возможности используйте дату как Date объект, а не как число
yopp
Почему это критично?
проще читать, будут доступны операторы на датами
Semeon
проще читать, будут доступны операторы на датами
Спасибо за советы! Я попробую и вернусь
Semeon
в $group в _id укажите null, иначе у вас получится что-то странное
А это нормально, что я использовал null в _id и теперь появилась плавающая точка?
yopp
плавающая точка где?
Semeon
плавающая точка где?
{ "LastTimeUpdate": 1571438875, "Temperature": 27.33180555555555, "Pressure": 748.9520833333333 } В возвращаемом объекте
yopp
да
Semeon
Это фиксится сердствами «Монги» или мне это в JS пофиксить?
yopp
зависит от того что вы хотите «пофиксить»
yopp
округлить вы можете и в js и в монге (https://docs.mongodb.com/manual/reference/operator/aggregation/round/)
Semeon
О! Вроде бы то, что нужно! Спасибо! Сейчас изучу
Semeon
зависит от того что вы хотите «пофиксить»
Я просто хочу округлить число до десятых
yopp
в этом случае округляйте на клиенте, в js
Semeon
Я хотел бы, что API возвращал числа с которыми не нужно производить никаких доп действий. Это критично, если я на беке посчитаю?
yopp
под клиентом я имею ввиду клиента с точки зрения монги
Semeon
Спасибо! Буду пробовать
yopp
$round может работать в $group?
Сомневаюсь. Добавьте его в отдельный шаг, $addFields/$project
Semeon
У меня получился такой запрос, но он почему-то не работает: { $match: { Date: { $gte: timeRange(604800), $lt: timeRange() }}}, { $project: { _id: null, Temperature: { $avg: "$Temperature" }, Pressure: { $avg: "$Pressure" } } }, { $project: { _id: null, Temperature: { $round: ["$Temperature", 2]}, Pressure: { $round: ["$Pressure", 2]} } }, // Агрегированией записей в объект { $group: { _id: null, LastTimeUpdate: { $max: "$Date" }, Temperature: "$Temperature", Pressure: "$Pressure" } }, // Удаление лишних данных из объекта { $project: { _id: 0, Date: 0, City: 0, Street: 0 }}
Semeon
Я пробовал разные варианты, но ни один не срабатывает. Что я не так делаю?
Paul
??
dolbolesya ты ли это?)
Paul
подскажете GUI клиент для монгодб на винду?
Paul
запущено локально
Bohdan
Robo3t
Denis
подскажете GUI клиент для монгодб на винду?
NoSqlBooster лучший (фри версия пойдет тоже)
Anonymous
NoSqlBooster лучший (фри версия пойдет тоже)
Чем он хорош? По сравнению с MongoDB Compass
Denis
Чем он хорош? По сравнению с MongoDB Compass
Всем. Там просто намного больше функций. Это мощный инструмент для разраба. Скрипты можно писать и тд
Сергей
Ребят, привет Подскажите, что делаю не так?
Сергей
Ребят, привет Подскажите, что делаю не так?
У меня массив с группами Там еще один массив с пользователями А у пользователей массив goals <= нужно достать отсюда элемент
Vova
А получаю полностью весь
Нужно 1 goal достать по условию?
Сергей
Vova
Почитай про $elemMatch
Сергей
Почитай про $elemMatch
Уже пробовал
Vova
Показывай как пробовал
Сергей
Вот что прошу
Сергей
Пробовал вот так