AstraSerg
ОЧЕНЬ ЛЕГКО ДА
Вообще, да, не сложно. Только попрактиковаться немного. После этого разбирательства вы сильно продвинитесь.
Vasiliy
ребят а как лучше делать, при наличии такого же индекса как в сортировке - сортировать -1 и потом в гроуп брать $first или сортировать 1 и в группировке брать $last?
AstraSerg
AstraSerg
Vasiliy
да, спасибо большое за отзывчивость, просто надо было индексное поле по которому сортируется добавить в match
AstraSerg
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
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
Игорь
или прописав командку в моного будет достаточно
AstraSerg
AstraSerg
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
AstraSerg
или просто вот это: db.eval( function(x) { return x + x; }, 3 )
Joseph
AstraSerg
вот это отработало
А изначальный почему не отрабатывает? Вы его писали или скопипастили где-то?
Joseph
>Вы его писали или скопипастили где-то?
То что я кинул это моя хранимка
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 стадии
AstraSerg
Vasiliy
мне бы желательно чтобы результатом следующего стейджа было
{ "created_at" : "2018-08-10T12:56:28.758060Z", "rig_session_id" : 2304, "code" : "GPU-...", "temperature" : "50" }
AstraSerg
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
AstraSerg
Vasiliy
да, собственно почти так и сделал
{$project: {rig_session_id: 1, code: '$gpus.code', temperature: '$gpus.temperature'}}
AstraSerg
Joseph
AstraSerg
Joseph
V
Ребята подскажите а ктото логи mongo собирает и пишет в еластик ?
AstraSerg
AstraSerg
V
вообще задача больше как понимать что происходит с базой , кто и что с ней делает
Vasiliy
AstraSerg
Vasiliy
хотелось бы одним запросом всё достать
Vasiliy
а почему так?
AstraSerg
а почему так?
На мой взгляд это уже обработка данных, которая не задача БД. Но если настаиваете то можно конвертировать: https://docs.mongodb.com/manual/reference/operator/aggregation/convert/#exp._S_convert
Vasiliy
у меня 3.6 монга
Khramov
Привет.
У меня к вам вопрос по монге :)
Есть отдельная однонодавая монга и есть replicaset отдельно из 3 нод.
Я на отдельной однонодовой монге заинитил rs, и хочу как-то посинкать данные между ними.
Получается, существующий rs из 3 нод со своим мастером я должен подключить как слейвы к однонодовой.
Подскажите, как правильно это сделать?
Сейчас сижу, читаю доку, но чет тяжело идет
Constantin
На репликасете из 3 нод уже что-то есть? Или он пока пустой? Остановка базы допускается?
Khramov
Остановка базы которая из 3 нод да, которая из 1 ноды - желательно нет,это прод, нанадолго можно, если это необходимо
в рс из 3 нод уже есть данные, желательно их сохранить, но если такой возможности нет - данные из однонодовой монги важнее
Khramov
Судя по доке, можно просто добавить к однонодовой 3 слейва, засинкать даннные, поменять мастера и вывести из кластера старого мастера, но тогда придется сбрасывать текущую трехнодовую монгу и терять данные
yopp
yopp
Вы можете экспортировать данных с одного из кластеров, переконфигурировать его и восстановить в свежескофигурированный
Khramov
Ну в трехнодовом тогда ок, пусть данные теряются. А на счёт рестора данных, там 100 гигов, долго будет. Я когда ресторил в атласе базу на 60Г, это длилось 12 часов, а тут ещё больше будет
Khramov
А пока будет ресториться, появятся новые данные в монге, и их тоже надо как-то синкать
AstraSerg
Constantin
Всем привет!
Может мне кто-то подсказать, вы создаете root пользователя для mongodb, когда включаете авторизацию и порты наружу?
Или когда узлы реплики на обслуживание переводите, просто выключаете байнд наружу и авторизацию?
yopp
Constantin
Есть еще один вопрос, когда я создаю репликасет, он не подхватывает пользователей созданных вне этого репликасета, даже если они уже были на этот момент созданы на всех узлах
Я правильно понимаю, что до того, как я создам пользователя уже внутри реплики, у меня монга «беззащитная»
Dmitry
вопрос по sequilize: