Николай
Реализовано сейчас это так, но при создании записи массив остается всё рано пустым
Николай
Nick
Да
просто не заполняйте поле нулом перед сохранением в базу. нулл в монге это вполне себе конкретное значение. если уж так сильно хочется писать в базу нулы, то есть sparsed индексы, которые так же можно пометить как уникальные
Leksey
всем привет! не встречал никто данного рода проблему? Unable to acquire ticket with mode '0' within a max lock request timeout of '5ms' milliseconds.
решил кстати вопрос проблема была из-за реплики секондари не догнал праймари и начались такие проблемы но не совсем очевидная проблема искал/гуглил - ничего но версия старая у меня в джире были ишью, наверняка пофиксили давно
Leksey
мужики и дамы естесно посоветуй куда смотреть у меня коллекции большие (терабайты данных) по ним аггрегации сейчас длятся по 3-6 минут индексы есть, все есть куда дальше глядеть? какие есть решения? статьи / ссылки / советы - все принимается
Leksey
мужики и дамы естесно посоветуй куда смотреть у меня коллекции большие (терабайты данных) по ним аггрегации сейчас длятся по 3-6 минут индексы есть, все есть куда дальше глядеть? какие есть решения? статьи / ссылки / советы - все принимается
я думал может КХ рядом присобачить как-то или другие решения какие-то не особо в этом силен и с таким объемом данных но проблема с каждым днем все больше и больше
Leksey
по сути аналитика/репорты я данные сразу с нескольких коллекций собираю дальше формулы и прочие математические штуки и потом репорт летит к пользователю
Leksey
я подумал в эту сторону: https://vkontech.com/migrating-your-reporting-queries-from-a-general-purpose-db-mongodb-to-a-data-warehouse-clickhouse-performance-overview/ но не знаю, насколько вообще адекватно получается у меня коллекция должна 1:1 в КХ пишу в монгу, пишу сразу к кх далее с кх получаю быстрые репорты как-то так? или не айс вариант?
Dmitry
Когда null - нет
UserSchema.index({ email: 1 }, { unique: true, partialFilterExpression: { email: { $type: 'string' } } })
Night
UserSchema.index({ email: 1 }, { unique: true, partialFilterExpression: { email: { $type: 'string' } } })
А индексы после создаются автоматически для каждого нового документа?
Dmitry
А индексы после создаются автоматически для каждого нового документа?
Оно индексирует только те документы, которые являются типа String, всё остальное игнорируется
Dmitry
Вот статья: https://www.mongodb.com/docs/rapid/core/index-partial/
Night
Оно индексирует только те документы, которые являются типа String, всё остальное игнорируется
Имею ввиду после создания индексов для какого либо поля, новые документы по этому полю продолжают индексироваться, добавляются новые записи индекса
Night
Сколько читал, не нашел инфы на этот счёт)
Night
Или только проиндексируются все старые записи, а все последующие нужно заново переиндексировать
Nick
по сути аналитика/репорты я данные сразу с нескольких коллекций собираю дальше формулы и прочие математические штуки и потом репорт летит к пользователю
запросы фиксированные? много новых появляется? реплики есть ну и/или шардирование? упираетесь в диски или cpu, или в то что в одном потоке много чего делается?
Dmitry
Имею ввиду после создания индексов для какого либо поля, новые документы по этому полю продолжают индексироваться, добавляются новые записи индекса
На сколько понимаю, то Mongo для каждого индекса (одинарный или составной), создает набор индексации и продолжает обновлять его по мере добавление новых документов
Dmitry
То что нужно, спасибо)
Но стоит учитывать, что если делать частичный индекс (как в том примере с email), то монга не будет индексировать документ до тех пор, пока условие не выполнится
Night
Но стоит учитывать, что если делать частичный индекс (как в том примере с email), то монга не будет индексировать документ до тех пор, пока условие не выполнится
Мне нужны индексы без условий, в рамках практики планирую попробовать аналитику и большой объем данных, на этапе проектирования
Night
Полагаю записи даты когда был добавлен документ в коллекцию хорошим выходом индексировать, документы все будут не перезаписываемые, отдавать результаты по условиям дат, от n числа, до x числа
Night
Волновал вопрос автоматического создания движком этих индексов при единовременном объявлении
Александр
Добрый день. Подскажите пожалуйста, приложение на nodeJS подключается к локалхост по uri mongodb://localhost:27017/userstatistics в контейнере, когда смотрю логи контейнера,вижу ошибку MongoDB connection Error MongoNetworkError: failed to connect to server [localhost:27017] on first connect [Error: connect ECONNREFUSED 127.0.0.1:27017 Как исправить ошибку с портом подключения к монге?
Kairat
Возможно там 0.0.0.0 надо прописать
Александр
Это нормальное состояние контейнера монги?
Leksey
запросы фиксированные? много новых появляется? реплики есть ну и/или шардирование? упираетесь в диски или cpu, или в то что в одном потоке много чего делается?
запросы +/- фиксированные можно сказать что по бОльшей части фиксированные новых появляется много реплика есть шардов нет в cpu и диск не упирается
Nick
запросы +/- фиксированные можно сказать что по бОльшей части фиксированные новых появляется много реплика есть шардов нет в cpu и диск не упирается
если в цпу и диск не упирается, то значит проблема в запросах и возможности их параллелизации монгой (увы не все параллельно делается). Тут либо принудительно разбивать на разные коллекции/разные запросы для мержа результатов либо и вправду ехать на на что-то другое для работы аналитики. В целом монга под аналитику не самое лучшее решение, так что вы уперлись в ее пределы и нужен другой инстурмент)
Nick
Добрый день. Подскажите пожалуйста, приложение на nodeJS подключается к локалхост по uri mongodb://localhost:27017/userstatistics в контейнере, когда смотрю логи контейнера,вижу ошибку MongoDB connection Error MongoNetworkError: failed to connect to server [localhost:27017] on first connect [Error: connect ECONNREFUSED 127.0.0.1:27017 Как исправить ошибку с портом подключения к монге?
проверяйте сетевую доступность вручную через тот же telnet или nc (внутрь докера как правило легко ставится). Доступ к локалхосту изнутри контейнера вроде не сработает без использования хостовой сети, так что удивительно как у вас чтото могло работать. Обращайтесь к сервисам внутри докеркомпоза через названия секций деплоя
Nick
Шарды не помогут? В контексте параллелизации.
частично, но возможно тупо дороже чем поднять тот же клик рядом (хотя наличие нормального спеца тоже не всегда дешевле железок). Основной момент - запросы не упираются в цпу и диски, а значит монга тормозит на операциях которые ускорить она не может. Так же это значит наверняка что данные лежат в файловом кэше и поэтому диски не грузятся - оперативы на серваке хватает, проц не перегружен - значит есть места где просто не нужно много потоков и скорее всего это связано с единичными доступами к данным (либо либо доки либо блоки индексов), которые уже в кэше и из-за летенси операций они лимитированы. Так что да - разбиение на меньшие блоки данных и мерж результатов как это было бы при шардирвоании может ускорить
Hannibal
Ребят, всем привет. Хочу получить все из массива все объекты, где есть нужные мне значения, но, почему-то ничего не работает. В бэкенде — полный ноль, уж простите, если вопрос поверхностный
Hannibal
Hannibal
Hannibal
Hannibal
Taras Kosyi (ง•̀o•́)ง
Привет. Pipeline. Не подскажете, как лимит на елементы в групе навесить? Колличество групп модно ограничить, а вот как с объектами в группе быть?
Александр
Всем привет. Только начинаю работать с монго, поэтому, может, вопрос будет глупым, но ничего не нагуглил (может, по незнанию) Ситуация такая - есть 2 ляма документов типа {fio, email, phone}. В phone содержатся записи телефонов в любом формате, например, 8 800 123-45-67 или +7 123 12 12. Делаю запрос, чтобы получить все телефоны, которые начинаются на +7. {phone: {$regex: /^\+7/}} Создал индекс phone_1. Вопрос такой: почему запрос выше срабатывает в два раза быстрее без индекса по полю, чем если индекс создан?
Max
всем привет! подскажите пж, как в монге обновить индекс с SQL like? SQL: update db1 set col1 = "test" where col2 like 'A%' Mongo: db.db1.updateMany({<what here?>}, {$set: {col1: "test"}})
Max
what here - тоже самое что и в find бы использовали
взял как пример отсюда: https://stackoverflow.com/questions/3305561/how-to-query-mongodb-with-like Запрос : (фотка)
Max
..не понимаю, что ему не нравится: в примерах регекс тоже со слеша начинается
Vladyslav
попробуй с /text/
Max
попробуй с /text/
у меня первой А должна стоять
Max
причем соло-запрос валиден
Nick
Спасибо. Тоже к этому склоняюсь.
проверить можно через мониторинг дисков во время запроса: если диск в полку по busy но скорость чтения явно не максиальна - то теория подтверждается. Соответственно на колскане должно быть слабое busy но большая скорость чтения
Dmitry
И почему сразу не сделаешь поиск нужных в find?
Taras Kosyi (ง•̀o•́)ง
[ {$match..}, { $group: {_id: “$name”, info: {$push: “$$ROOT”}} }, { $limit: 5 }, ] Это мой пайплайн. Я группирую информацию по полю имя, которое есть во всех объектах. Но так как я возвращаю только 5 груп, я хочу знать, сколько всего груп есть. Как в пайплайне посчитать кол. групп?
Dmitry
Вроде так
Dmitry
По пробуй $facet перед $limit
Dmitry
Но это вроде не очень вариант будет
Nick
да там других вариантов и нет либо фасет либо unionWith
Taras Kosyi (ง•̀o•́)ง
Еще прикол в том, что я хоче все в рамках одного ответа. То есть мои группы и тотал каунт
Taras Kosyi (ง•̀o•́)ง
Ну. $facet
Буду дублировать начало пайплайна. Но ладно, жаль, что иначе нелься. Спасибо
Hannibal
И почему сразу не сделаешь поиск нужных в find?
Не подумал, а сам запрос в остальном у меня правильный, я данные с параметра адреса получаю? Огромное спасибо
Dmitry
Чтобы filter использовать, тебе надо сначала ответ от БД дождаться. Тогда по идеи он перестанет заходит в catch
Dmitry
Ты пытаешься вызвать метод, которого нет
Hannibal
Спасибо еще раз, очень благодарен
Dmitry
А раз его нет, а дальше только ожидание, то надо завернуть всё в скобки () и уже от них вызывать filter
Dmitry