AstraSerg
ОЧЕНЬ ЛЕГКО ДА
Вообще, да, не сложно. Только попрактиковаться немного. После этого разбирательства вы сильно продвинитесь.
Vasiliy
ребят а как лучше делать, при наличии такого же индекса как в сортировке - сортировать -1 и потом в гроуп брать $first или сортировать 1 и в группировке брать $last?
Vasiliy
да, спасибо большое за отзывчивость, просто надо было индексное поле по которому сортируется добавить в match
AstraSerg
да, спасибо большое за отзывчивость, просто надо было индексное поле по которому сортируется добавить в match
Ну и отлично. Дерзайте. Кстати у монгги есть халявные курсы, правда на англицком, но прикольно.
Vasiliy
у нас только часть с отчётами в монге, остальное постгре
Vasiliy
а можете ссылку кинуть?
Игорь
Вопрос. Настроил ротацию логов через logrotate.d
Игорь
конфиг /var/log/mongodb/*.log { daily rotate 30 compress dateext missingok notifempty sharedscripts postrotate /bin/kill -SIGUSR1 `cat /var/lib/mongodb/mongod.lock 2> /dev/null` 2> /dev/null || true endscript }
Игорь
при его запуске монго падает
Stanislav
Может кто-нибудь знает, есть ли какие-то книги/курсы по бигдате в монге? типа, как жить с 100трлн документов и как делать по ним аналитику
Stanislav
есть конечно подозрение, что монга вообще не для этого, но хочется посмотреть на попытки и во что упираются такие системы
AstraSerg
а можете ссылку кинуть?
Да, конечно: https://university.mongodb.com/
AstraSerg
Предложение типа rm -rf / : запишите туда 1 :))))
AstraSerg
только не в проде :)
Joseph
db.eval((queueId = "5b6cf99c0026bf6c948b3663", operationId = -1, skip = 0) => { const queueParrent = db.queues .find({ parent: { $exists: true } }) .populate('document', 'uid') .sort({ updated: -1 }); var filtred = queueParrent.filter(el => ( String(el.parent.queue) === queueId) && (Number(operationId) + 1 === el.parent.operationId)); var statistic = {}; filtred.forEach((el) => { statistic[el.status] = !statistic[el.status] ? 1 : statistic[el.status] + 1; }); var lengthSubQueue = filtred.length; filtred = filtred.slice(skip, skip + 10); console.log(1111111); console.log(filtred, lengthSubQueue, statistic); return { arr: filtred, lengthSubQueue, statistic }; }); Не могу понять почему она ретурнит не значения а саму функцию
Игорь
AstraSerg
смотрите: kill принимает 2 параметра: тип сигнала и номер процесса, кому его послать. Номер процесса обычно находится в файле с расширением .pid а у вас .lock почему-то
Игорь
а вообще просто выставления db.adminCommand( { logRotate : 1 } ) достаточно для ротации логов? Я чет читал, читал, но так и не понял, нужнен ли еще этот самый logrotate.d
Игорь
или прописав командку в моного будет достаточно
Joseph
А точно не выполняется? Может просто выводит что собирается делать?
Вот что это чудо мне возвращает { "code": "(queueId, operationId, skip = 0) => {\n const queueParrent = db.queues\n .find({ parent: { $exists: true } })\n .populate('document', 'uid')\n .sort({ updated: -1 });\n let filtred = queueParrent.filter(el => (\n String(el.parent.queue) === queueId) &&\n (Number(operationId) + 1 === el.parent.operationId));\n const statistic = {};\n filtred.forEach((el) => {\n statistic[el.status] = !statistic[el.status] ? 1 : statistic[el.status] + 1;\n });\n const lengthSubQueue = filtred.length;\n filtred = filtred.slice(skip, skip + 10); // 10 - limit\n return { arr: filtred, lengthSubQueue, statistic };\n }" }
Joseph
Собственно ее ретурн почему то
Joseph
😕
AstraSerg
или просто вот это: db.eval( function(x) { return x + x; }, 3 )
AstraSerg
вот это отработало
А изначальный почему не отрабатывает? Вы его писали или скопипастили где-то?
Joseph
>Вы его писали или скопипастили где-то? То что я кинул это моя хранимка
Vasiliy
так, сегодня я лидирую по вопросам
Vasiliy
{ "created_at" : "2018-08-10T12:56:28.758060Z", "rig_session_id" : 2304, "gpus" : { "code" : "....", "temperature" : 57 } } { "created_at" : "2018-08-10T12:56:28.758060Z", "rig_session_id" : 2304, "gpus" : { "code" : "GPU-...", "temperature" : "50" } } ... как мне вытащить code и temperature на уровень выше?
Vasiliy
это после unwind стадии
Vasiliy
мне бы желательно чтобы результатом следующего стейджа было { "created_at" : "2018-08-10T12:56:28.758060Z", "rig_session_id" : 2304, "code" : "GPU-...", "temperature" : "50" }
Vasiliy
так прожект же вроде только контроллирует что показывать а что нет, не?
AstraSerg
да, ну и название можно другое сделать: <field>: <expression> Adds a new field or resets the value of an existing field. https://docs.mongodb.com/manual/reference/operator/aggregation/project/
Vasiliy
я пока дошёл до такого
Vasiliy
db.reports.aggregate([ {$match: {rig_session_id: {$in: [2304, 2255]}, created_at: {$gte: '2018-08-10T10:39:04'}}}, {$sort: {created_at: -1}}, {$group: {_id: '$rig_session_id', last_report: {$first: '$$ROOT'}}}, {$project: {last_report: {created_at: 1, rig_session_id: 1, 'gpus': {code: 1, temperature: 1}}}}, {$replaceRoot: {newRoot: '$last_report'}}, {$unwind: '$gpus'} ]);
Vasiliy
а, понял, через $ нотацию
Vasiliy
блин, офигенски, так можно же всю логику в тупо запросы вытащить
AstraSerg
Нп ердпоследнем стейдже вместо 'gpus': {code: 1, temperature: 1} сделайте: gpus_code: '$gpus.code', gpus_temperature: '$gpus.temperature' Поясннения: https://docs.mongodb.com/manual/reference/operator/aggregation/project/#include-computed-fields
Vasiliy
да, собственно почти так и сделал {$project: {rig_session_id: 1, code: '$gpus.code', temperature: '$gpus.temperature'}}
AstraSerg
>Вы его писали или скопипастили где-то? То что я кинул это моя хранимка
По поводу хранимок вот древняя статья есть http://dirolf.com/2010/04/05/stored-javascript-in-mongodb-and-pymongo.html но хранимки - это не тру вей. БД должна данные хранить, а не логику, ИМХО.
V
Ребята подскажите а ктото логи mongo собирает и пишет в еластик ?
V
Запросики у вас... Логи демона или oplog?
ну oplog интересней (поэтому пока на нем можно остановиться) , демона тоже интересно
AstraSerg
V
вообще задача больше как понимать что происходит с базой , кто и что с ней делает
AstraSerg
вообще задача больше как понимать что происходит с базой , кто и что с ней делает
А, мониторинг, это другое дело, во например экспортер для прометеуса: https://github.com/dcu/mongodb_exporter
Vasiliy
хотелось бы одним запросом всё достать
AstraSerg
хотелось бы одним запросом всё достать
Да, но достать же в приложение. Желательно сделать это в приложении
Vasiliy
а почему так?
AstraSerg
а почему так?
На мой взгляд это уже обработка данных, которая не задача БД. Но если настаиваете то можно конвертировать: https://docs.mongodb.com/manual/reference/operator/aggregation/convert/#exp._S_convert
Vasiliy
у меня 3.6 монга
AstraSerg
у меня 3.6 монга
Я не сталкивался и не ищется чёт...
Khramov
Привет. У меня к вам вопрос по монге :) Есть отдельная однонодавая монга и есть replicaset отдельно из 3 нод. Я на отдельной однонодовой монге заинитил rs, и хочу как-то посинкать данные между ними. Получается, существующий rs из 3 нод со своим мастером я должен подключить как слейвы к однонодовой. Подскажите, как правильно это сделать? Сейчас сижу, читаю доку, но чет тяжело идет
Constantin
На репликасете из 3 нод уже что-то есть? Или он пока пустой? Остановка базы допускается?
Khramov
Остановка базы которая из 3 нод да, которая из 1 ноды - желательно нет,это прод, нанадолго можно, если это необходимо в рс из 3 нод уже есть данные, желательно их сохранить, но если такой возможности нет - данные из однонодовой монги важнее
Khramov
Судя по доке, можно просто добавить к однонодовой 3 слейва, засинкать даннные, поменять мастера и вывести из кластера старого мастера, но тогда придется сбрасывать текущую трехнодовую монгу и терять данные
yopp
Вы можете экспортировать данных с одного из кластеров, переконфигурировать его и восстановить в свежескофигурированный
Khramov
Ну в трехнодовом тогда ок, пусть данные теряются. А на счёт рестора данных, там 100 гигов, долго будет. Я когда ресторил в атласе базу на 60Г, это длилось 12 часов, а тут ещё больше будет
Khramov
А пока будет ресториться, появятся новые данные в монге, и их тоже надо как-то синкать
Constantin
Всем привет! Может мне кто-то подсказать, вы создаете root пользователя для mongodb, когда включаете авторизацию и порты наружу? Или когда узлы реплики на обслуживание переводите, просто выключаете байнд наружу и авторизацию?
Constantin
Есть еще один вопрос, когда я создаю репликасет, он не подхватывает пользователей созданных вне этого репликасета, даже если они уже были на этот момент созданы на всех узлах Я правильно понимаю, что до того, как я создам пользователя уже внутри реплики, у меня монга «беззащитная»
Dmitry
вопрос по sequilize: