Nick
не должен, и возможно не придет, и возможно не отловится и возможно чтото поменяется в логике отлова в нижележащих либах а вы это не будете отслеживать - куча тонких моментов, хот ьи маловероятных котоыре могут выстрелить. Да даже банальное - "мы по другому кильнули процесс случайно" и никаких уведомлений уже не будет. Плюс ждать пока софт доставит все уведомления будет достаточно долго по времени и хрен знает как убедитсья что оно доставило тойже техподдержке, а не софт завис и его надо принудительно прибивать
Artem
выходит, из вариантов только делать отдельный программный "рубильник" который "подготовит все и всех к стопу" ?
Nick
или тех.работы
тех работы - вывешивается заглушка, туда направляется весь трафик, сервис обслуживается. Обновление - тут зависит от того как запускается приклад, если это докер и иже с ними - просто обнова, если это старый мудреный софт со стартом в полчаса, то он настолько стар что там уже ест ьинстуркция как это делать)
Андрей
Это похоже на какую-то попытку создать автоматическую систему взаимодействия с клиентами из говна и палок. Для этих целей везде есть специально обученные люди, которые ставят сервисы на регламент, вследствие чего в приложениях вешаются баннеры о том, что сервис не работает и другой либо тот же специально обученный человек запускает, если необходимо, рассылку клиентам сообщений через установленный канал коммуникаций.
Андрей
Если б меня как клиента каждый раз "автомат" разных контор оповещал о том, что любая приложуха померла, я б застрелился 😬
Nick
выходит, из вариантов только делать отдельный программный "рубильник" который "подготовит все и всех к стопу" ?
в общем случае клиенты должны нормально отрабатывать полное пропадание сервиса изза любых проблем и это их задача. Вы со свое стороны можете просто описать что при таком ответе значит что мы обновляемся, а при таком что у нас тех работы и выставлять соответсвующие заглушки. Оповещения же имеют смысл только в полностью контролируемом вами продукте, где вам очень важно добиваться милисекундных задержек на получение информации что вот эта нода сейчас уйдет в ребут и нужно чтото сделать чтобы весь сервис не помер - пример любой софт в кластерной реализации, та же монга с выборами мастер ноды. Но при этом она так же отработает и в случает непредвиденного краша, но с большей задержкой чем при контролирвоанной остановке
Artem
окей, я думаю, я вас понял) спасибо
Alex
Всем привет. Коллеги, подскажите, как реализовать округление в агрегации в монге 4.0? $round там еще нет к сожалению
Nick
Всем привет. Коллеги, подскажите, как реализовать округление в агрегации в монге 4.0? $round там еще нет к сожалению
$ceil $floor. Если надо округление дробного числа, то сначала умножить, потом округлить в нужную сторону и потом поделить
Vitalii
здравствуйте, помогите дополнить запрос: [ {"$match":{"campaignId":"2"}}, {"$sort": {"nullFirstName": -1, "lowerFirstName": -1}}, {$project: {lowerCaseValue: 1, isNulled: 1}}, // добавил, из-за Sort exceeded memory limit ... {"$facet":{ "count":[{"$count":"total"}], "messages":[{"$skip":0},{"$limit":10}] } } ] Вопрос, как сделать, что-б в facet попадали оригинальные документы? Вариант с addField не предлагать, т.к. я не знаю какие будут поля (
Vitalii
добавьте индекс campaignId:1, nullFirstName: -1, lowerFirstName: -1 и уберите $project
Куда добавить? В саму базу? Если да, то так не получиться, т.к. полей индексированых по которым выборка идем много (
Vitalii
тогда просто ставим allowDiskUse: true и ждем сортировку без $project
А как-то прокинуть и сделать повторный match по результатам сорта и facet? Что то типа: [ .... {facet: {count: [...], messages: [ {$match: {_id: '$facetresults.messages._id'}} ]}} ]
Nick
А как-то прокинуть и сделать повторный match по результатам сорта и facet? Что то типа: [ .... {facet: {count: [...], messages: [ {$match: {_id: '$facetresults.messages._id'}} ]}} ]
не понял вопроса и зачем прокидывать, у вас уже все отфильтровалось перед сортировкой, или в чем вопрос
Vitalii
не понял вопроса и зачем прокидывать, у вас уже все отфильтровалось перед сортировкой, или в чем вопрос
отфильтровалось, но из полей только id, lowerCaseValue, isNulled. А мне надо оригинал документов
Vitalii
так уберите project
Ну и тогда отвалиться из-за того, что памяти не хватает
Александр
Дорый день. У меня есть задачи посчитать количество новых клиентов у магазина за сегодня. Уникальный клиент, тот который не делал заказов ранее в магазине. Пишу агрегацию для коллекции orders. Подскажите пожалуйста как в group сделать проверку есть ли другой заказ с таким id пользователя и если нет чтоб срабатывал sum?
Vitalii
allowDiskUse: true
не вариант
Nick
не вариант
почему?
Vitalii
почему?
Ну потому, что я не хочу насиловать диск сотнями мегабайт... У меня сейчас 2 варика, 1-й — создавать отдельную базу для сортирвки, 2-й — возвращать только айдишки, и потом делать еще один запрос чисто по айдишкам... Но я чувствую, что можно обойтись одним (
Александр
перед группировкой ..., $lookup:{}, $group:{}:
Lookup даже если я работаю только с одной коллекцией ? Там не нужно получать данные из других
Nick
Ну потому, что я не хочу насиловать диск сотнями мегабайт... У меня сейчас 2 варика, 1-й — создавать отдельную базу для сортирвки, 2-й — возвращать только айдишки, и потом делать еще один запрос чисто по айдишкам... Но я чувствую, что можно обойтись одним (
обойтись не удастся, т.к. у вас объем данных мифически не исчезнет. Вы можете разве что через $lookup заново по id подтянуть доки, можете как раз сравнить что по скорости и нагрузке будет предпочтительнее по сравнению с флагом
Nick
Lookup даже если я работаю только с одной коллекцией ? Там не нужно получать данные из других
лукап на саму себя с указанием другого фильтра для выборки вполне нормальное действо
Vitalii
>ем данных мифически не исчезнет. Вы можете разве что через $lookup заново по id подтянуть доки, можете как раз сравнить что по скорости и нагрузке будет предпочтительнее по сравнению с флагом оо вот походу то что надо )
Nick
А в чем тогда его отличие от match? Интересно
это доп выборка по каждому уже сматченному доку, условный джойн из sql мира
Oleg
Всем привет. Подскажите пож-та, возможно, уже кто-нибудь сталкивался с подобной проблемой? Пробую восстановить бэкап mongorestore --uri="mongodb://dba:pass12345@mongodb-home-1:27017,mongodb-home-2:27017,mongodb-home-3:27017/?replicaSet=rs0&authSource=admin" --dir=dump Получаю ошибку Failed: config.tenantMigrationRecipients: error creating indexes for config.tenantMigrationRecipients: createIndex error: (Unauthorized) not authorized on config to execute command { createIndexes: "tenantMigrationRecipients", indexes: [ { key: { expireAt: 1 }, name: "TenantMigrationRecipientTTLIndex", expireAfterSeconds: 0, ns: "config.tenantMigrationRecipients" } ], ignoreUnknownIndexOptions: true, lsid: { id: UUID("898a807d-cfea-4abb-a306-cec4344dcb6e") }, $clusterTime: { clusterTime: Timestamp(1686759124, 574), signature: { hash: BinData(0, 697F8C78C826C815E068A8843213DCF7D5906EDA), keyId: 7244573263764914181 } }, $db: "config", $readPreference: { mode: "primary" } } Иногда ошибка касается config.tenantMigrationDonors
Vyacheslav
Не хватает прав/авторизации
Oleg
Не хватает прав/авторизации
ну у меня dba имеет следующие роли "roles": [ { "role": "readWriteAnyDatabase", "db": "admin" }, { "role": "clusterAdmin", "db": "admin" }, { "role": "userAdminAnyDatabase", "db": "admin" } ]
Vyacheslav
Эт не ко мне, это к документации 😅
Oleg
всем спасибо, не хватало роли root
Nurlan
всем спасибо, не хватало роли root
Легенда гласит “Пять часов тыкания тудым-сюдым спасает вас от пяти минут чтения документации”)
Влад
всем привет, ткните пожалуйста носом как пофиксить эту помойку с READ__ME_TO_RECOVER_YOUR_DATA
Влад
пиздец через brew ставил монгу
Mashxurbek
У тебя в базе были данные юзеров
Если хранить данные пользователей то нужно включить авторизацию. Плюсом будет добавление IP адресов в bindIp
Влад
вымогатели чтоль
да это хрень какая-то, у меня просто при ребуте мака полностью бд чистится и эта хрень ставится, при том что я ставил монгу через брю по гайдам из доки
Mashxurbek
По-моему у тебя в bindIp там был 0.0.0.0.
Mashxurbek
Не знаю монго это или кто-то но из-за отсутствия как минимум авторизации при подключении, такое случается
Mashxurbek
Короче тем данным кронты
Mashxurbek
Если не копаться очень глубоко
nickdd
Влад
неплохой инструмент что аж из доки как говно ставится
Mashxurbek
https://stackoverflow.com/questions/63873677/data-is-not-being-saved-in-mongdb
Mashxurbek
неплохой инструмент что аж из доки как говно ставится
Просто нужно было добавить автроизацию
Андрей
Влад
да какую базу снесли
Влад
это по кд появляется
Влад
при ребуте
Влад
я с нуля поставил монгу по доке, это сразу же началось
Mashxurbek
Андрей
MongoDB автоматом чистится при даунтайме только с ин мемори энджайном.
Влад
настолько ахуенно чистится, что при удалении этой хрени READ__ME_TO_RECOVER_YOUR_DATA она появляется заново
Андрей
С нуля поставил по доке - это бины распаковал. Конфиг и лог надо смотреть.
Андрей
По этой фразе в гугле всё в случаях сноса баз.
Nick
настолько ахуенно чистится, что при удалении этой хрени READ__ME_TO_RECOVER_YOUR_DATA она появляется заново
так вас ломают походу, закрывайте доступ к базе извне, добавляйте авторизацию и т.п. Можно почитать например https://www.mongodb.com/community/forums/t/database-deleted-auto/99623/2 там в комментах немного расписано В общем надо безопасностью знаиматься
Влад
это может как-то влиять?
Nick
это может как-то влиять?
как раз это и влияет, биндитесь на 0.0.0.0 и подключение к монге становится доступно всем кто может постучать на машну
Mashxurbek
bindIp: 127.0.0.1 bindIpAll: true
Если хочешь чтоб могли коннектиться с любого IP то добавь авторизацию
Влад
да мне не нужно чтоб коннектились
Влад
локальная бд
Влад
ладно спс всем, ща поправлю
Oleg
всем спасибо, не хватало роли root
кстати, еще нашел роли backup и restore