Josh
Пробую вот так Но работает не так как мне нужно Должно срабатывать при каждой записи Но срабатывает только при создании союза(
потому что на валидацию союза стоит, тут как раз надо (нет, лучше вообще так не делать) тогда разносить
Сергей
зачем под сумму отдельно вложенный объект заводить – хз, да и в виртуале это можно было бы сделать SUnion.virtual('membersCount').get(function () { return this.members.count }) SMember.virtual('totalGoals').get(function () { return this.goals.count })
Супер варианты! Но тут момент, у меня стоит фильтр и при вызове возвращается только data без массива Поэтому TypeError: Cannot read property 'length' of undefined А возможно ли как нибудь без объявления переменных membersCount...?
Josh
звучит как проклятье 😁
Сергей
звучит как проклятье 😁
Все слишком сложно, но очень интересно)
Josh
тогда хоронить число при апдейте, раз тащить надо сразу
Josh
Вот так добавляю
я бы посоветовал более плоско реорганизовать структуру
Сергей
Josh
Похоже, что так и нужно мне сделать
https://docs.mongodb.com/ecosystem/use-cases/
Josh
тут явно напрашивается значение unions у пользователя, если вообще не union
Сергей
https://docs.mongodb.com/ecosystem/use-cases/
Боже, я разобрался Ну наконец то Оказывается, ничего вызывать не нужно, просто пишу эти команды, и данные автоматом ставятся
Сергей
Nick
А в базу оно сохраняется? Или вам не нужно?
Slavik
Здравствуйте, в монго можно сделать проверку? Например удалить компанию только если в ней нету работников?
Сергей
А в базу оно сохраняется? Или вам не нужно?
Не обязательно Это просто, что бы в интерфейсе ориентироваться
Semeon
Если вдруг кому-то интересно, то у меня получилось обновить «Монгу» на Debian до 4.2
Semeon
а в чем там проблема? деб старый?
Debian 9. Просто почему-то не получалось обновить «Монгу»
Anonymous
доброй ночи всем. надо перенести коллекцию из мульонов документов в другую БД (с нуля), и добавить там дополнительное поле. как это лучше всего сделать? await oldVideos.find().forEach(async video => { await videos.insertOne(video); }); такой способ имеет 2 минуса: 1. долго как-то 2. не понятно как так добавить еще одно поле в ходе переноса какие еще есть варианты?
Anonymous
ладно, пока так await videos.insertOne({ ...video, donor: 'website.com', }); если можно более эффективно скажите плз
Anonymous
в одной операции изменить поле и удалить другое невозможно?
Hellomik
хай пацаны кто знает почему не работает await this.takeChecker .db('grataDatabase') .collection('users') .findOne({ moderator: { institutionIds: { $elemMatch: [ new ObjectID('5dab1c214f2e663eb08ca521'), ], }, }, });
Hellomik
вот сам документ
Hellomik
если я уберу $elemMatch и поставлю чисто массив работает хай пацаны кто знает почему не работает await this.takeChecker .db('grataDatabase') .collection('users') .findOne({ moderator: { institutionIds: [ new ObjectID('5dab1c214f2e663eb08ca521'), new ObjectID('5dade7f9af3ead39e8cf7b76'), ], }, });
Aleksandr
Что значит не работает и какой результат корректный?
Aleksandr
ЭлемМатч это вообще надо юзать когда в массиве объекты
Hellomik
Что значит не работает и какой результат корректный?
ох сори, занчит какой оператор юзать ?
Aleksandr
Hellomik
ну мне нужна что бы хоть один совпадал
Hellomik
то что внутри institutionIds
Hellomik
я поменял elemMatch на or all in
Hellomik
0 changes
Hellomik
От ответа на этот вопрос зависит
а операторы на бесплатной версии работают ?
Vova
@dd_bb
Hellomik
От ответа на этот вопрос зависит
Хай я поставил enterprice но все равно гонит
Hellomik
Просто через точку moderator.institutionIds: new Obj....
moderator.institutionIds: { $elemMatch: [ '5dade7f9af3ead39e8cf7b76', ], },
Hellomik
это имеешь виду ?
Nick
Уберите элемматч
Hellomik
это имеешь виду ?
Hellomik
(я там поменял на String)
Nick
У вас ид в виде строк?
Hellomik
ага
Nick
Тогда да
Anonymous
В другую бд или в другую коллекцию?
БД. коллекцию из одной БД, в коллекцию в другой БД
Артем
Вероятнее всего изменилась структура нагрузки. Ищите проблемные запросы. Скорее всего появилось что-то с collscan по всему шарду. Вторая проблема что у вас в монгу стреляет оом. Проверьте что монга корректно видит доступную ей память, что у вас под кэш wt выделено не больше половины этого объёма. Если кроме монге на хосте есть другие сервисы — уберите их. Если у вас на хосте больше одной монги — вынести их на отдельные хосты. Если на хостах с монгами есть монгосы, то вынести монгосы на отдельные хосты.
Запоздалое спасибо за советы:) Всё это время искал причину, но пока так и не нашёл. На всех машинах кэш wt выставлен по-дефолту, но поле "bytes currently in the cache" показывает, что ещё целый 1гб из 7 свободно. Команда db.serverStatus().tcmalloc.tcmalloc.formattedString выдаёт что почти вся память машины(15гб) в поле Bytes in use by application. Долгие запросы также мониторил, есть aggregate запросы, но они занимают максимум 200мс и не такие частые, используются для мониторинга сервиса, пробовал отключать на время, но не помогло, память всё равно продолжает течь. Заметил, во-первых, что память проседает только на секондари и , во-вторых, что при падении одной из нод по оом'у начинают проседать по памяти несколько других нод из разных шардов. Не знаю в какую сторону копать дальше, уже думаю попробовать обновить саму монгу (сейчас используем 3.4.20)
yopp
если в новой базе уже есть документы, то сначала сделать дамп с оригинальными документами, потом сделать $set, а потом сделать дамп с документами с полем
yopp
Запоздалое спасибо за советы:) Всё это время искал причину, но пока так и не нашёл. На всех машинах кэш wt выставлен по-дефолту, но поле "bytes currently in the cache" показывает, что ещё целый 1гб из 7 свободно. Команда db.serverStatus().tcmalloc.tcmalloc.formattedString выдаёт что почти вся память машины(15гб) в поле Bytes in use by application. Долгие запросы также мониторил, есть aggregate запросы, но они занимают максимум 200мс и не такие частые, используются для мониторинга сервиса, пробовал отключать на время, но не помогло, память всё равно продолжает течь. Заметил, во-первых, что память проседает только на секондари и , во-вторых, что при падении одной из нод по оом'у начинают проседать по памяти несколько других нод из разных шардов. Не знаю в какую сторону копать дальше, уже думаю попробовать обновить саму монгу (сейчас используем 3.4.20)
Добавить мониторинг wt bytes in cache, bytes written in cache, bytes read from cache, pages evicted на всех коллекциях и индексах
yopp
и смотреть какая коллекция или какой индекс начинают течь
yopp
но вообще oom и монга это очень плохая идея
yopp
особенно если на хосте есть что-то, что может попросить выделить ему много памяти
yopp
3.4 уже EOL, стоит попробовать поехать до 3.6
yopp
обновить до .23 точно нужно
yopp
у вас на хосте строго одна монга?
Артем
хосты у нас чисто под монгу, из 40 нод стабильно падают 3-4 в сутки, пока сделал затычку в виде Restart=on-failure, т.к. не успеваю поднимать
yopp
и это не докер?
Артем
нет
yopp
а какой qps?
yopp
и какой средний размер ответа?
yopp
сколько соединений?
yopp
хотя если «то ещё целый 1гб из 7 свободно», то течёт не кеш, да
yopp
круг подозреваемых в 3.4 не очень широкий: соединения, буферы под сортировки, буферы под агрегации
yopp
бага в монге)
Гена
Коллеги добрый день Такой вопрос При выполнении запросов на чтение в 900rps время ответа запроса в норме Как только 1000rps - то время отклика увеличивается в разы При этом никакой утилизации ресурсов нет Мне кажется, что дело в connection стринге. Все параметры в URI выставлены по дефолту Хотя я могу быть не прав. Подскажите, в чем может быть проблема Спасибо
yopp
поставьте slowlog трешхолд равный вашим «в разы» и посмотрите, начинают ли падать в slowlog запросы когда у вас «увеличилось время в разы»
yopp
задержка по версии какого компонента?
yopp
монги или вашего приложения?
Гена
приложения
yopp
если приложения, то убедитесь что это не проблема вашего приложения
yopp
если в логе ничего не будет, ищите проблему в приложении
yopp
или в оси
yopp
это плохой совет