-
Можно сортировать по самому objectId т.к. всё корректно отрабатывать будет, также время создания можно из ObjectId вытащить.
Brykez7
Nick
О спасибо об этом не знал.
Не надо использовать системное поле не предназначенное для хранения бизнес данных к которым относится у вас дата. И "можно достать дату" и "удобно работать с датой" это разные вещи и второе не про objectid.
Турышев
https://medium.com/serpapi/mongodb-benchmark-3-4-vs-4-4-vs-5-0-vs-6-0-cb65146ae5ee
Всем здравствуйте! Хотим монгу на 6 версию с 4.4 обновить. Наткнулись на такую статью. Подскажите, пожалуйста, этой статье можно верить? Или кто-нибудь сталкивался с деградацией, после обновления?
Андрей
El
Я извиняюсь, есть ли в монге метод при создании документа что б его вернул? При обновлении нашел, а при создании не увидел. Иль самому делать доп запрос?
Easy Rider
Easy Rider
Вот и делай дальше с ним что хочешь, монга ж просто вставляет его в коллекцию
Brykez7
Насколько хорошей идеей будет удалять документ из MongoDB по составному индексу? Или это нежелательно и лучше удалять по id?
of Astora 𒉭
Насколько хорошей идеей будет удалять документ из MongoDB по составному индексу? Или это нежелательно и лучше удалять по id?
Удаление документов из MongoDB по составному индексу возможно и может быть полезным в некоторых ситуациях. Однако, есть несколько вещей, которые следует учесть:
1. Производительность: Удаление документов по составному индексу может быть медленнее, чем удаление по идентификатору (id). При использовании составного индекса MongoDB должна выполнить дополнительные операции для поиска и удаления соответствующих документов.
2. Уникальность: Если составной индекс не является уникальным, удаление по нему может привести к удалению нескольких документов, соответствующих критериям индекса. В то время как удаление по идентификатору (id) гарантирует удаление только одного документа.
3. Читаемость кода: Удаление по идентификатору (id) является более понятным и ясным для других разработчиков. Они могут легко понять намерение удаления документа по его уникальному идентификатору.
В целом, рекомендуется использовать удаление по идентификатору (id), если это возможно. Однако, если у вас есть особые требования или конкретные сценарии использования, где удаление по составному индексу имеет смысл, то вы можете использовать его. Важно оценить производительность и уникальность составного индекса перед его использованием для удаления документов.
Brykez7
Удаление документов из MongoDB по составному индексу возможно и может быть полезным в некоторых ситуациях. Однако, есть несколько вещей, которые следует учесть:
1. Производительность: Удаление документов по составному индексу может быть медленнее, чем удаление по идентификатору (id). При использовании составного индекса MongoDB должна выполнить дополнительные операции для поиска и удаления соответствующих документов.
2. Уникальность: Если составной индекс не является уникальным, удаление по нему может привести к удалению нескольких документов, соответствующих критериям индекса. В то время как удаление по идентификатору (id) гарантирует удаление только одного документа.
3. Читаемость кода: Удаление по идентификатору (id) является более понятным и ясным для других разработчиков. Они могут легко понять намерение удаления документа по его уникальному идентификатору.
В целом, рекомендуется использовать удаление по идентификатору (id), если это возможно. Однако, если у вас есть особые требования или конкретные сценарии использования, где удаление по составному индексу имеет смысл, то вы можете использовать его. Важно оценить производительность и уникальность составного индекса перед его использованием для удаления документов.
Главное не перепутать 1.2 и 2.3 пункт)
El
El
Easy Rider
то есть у тебя появляется как бы новый документ, который порождается этим оператором, а не тобой, и монга тебе его возвращает
Easy Rider
Easy Rider
try{...insert... return true}catch{return false}
Easy Rider
как-то так. ну или возвращать объект или null в случае неуспеха
El
Я пока не совсем понимаю разницы, между вставкой и обновлении, почему в первом случае решили не возвращать документ, а во втором сделали возврат
El
Brykez7
У меня возникают вопросы по поводу того почему insert не возвращает значение из за того что сама MongoDB может генерировать ObjectId но она его не возвратит.
El
Brykez7
Brykez7
Nijat
Добрый день.
Не знаю, точно ли я по адресу, тем не менее, вдруг направите в нужном направлении.
Дано: 0 опыта и знаний по монго. Тем не менее, имеется одна БД в составе ПО, которая крутилась на отдельной виртуалке. Так вышло, что виртуализация поднакрылась медным тазом 29.06 вечером. Последний бэкап виртуалки целиком от 29.06 03:00. Быстренько восстановили виртуалку из бэкапа, данные продолжили писаться в неё. Однако удалось восстановить образ виртуалки с базой монго на момент накрытия тазом. В используемой в данный момент базе нет данных за 29.06. В восстановленном образе есть данные за 29.06, но нет всего, что после. Есть ли какие-либо способы внести в используемую сейчас базу утерянные данные за 29.06?
Nick
Андрей
Добрый день.
Не знаю, точно ли я по адресу, тем не менее, вдруг направите в нужном направлении.
Дано: 0 опыта и знаний по монго. Тем не менее, имеется одна БД в составе ПО, которая крутилась на отдельной виртуалке. Так вышло, что виртуализация поднакрылась медным тазом 29.06 вечером. Последний бэкап виртуалки целиком от 29.06 03:00. Быстренько восстановили виртуалку из бэкапа, данные продолжили писаться в неё. Однако удалось восстановить образ виртуалки с базой монго на момент накрытия тазом. В используемой в данный момент базе нет данных за 29.06. В восстановленном образе есть данные за 29.06, но нет всего, что после. Есть ли какие-либо способы внести в используемую сейчас базу утерянные данные за 29.06?
Экспортнуть по датам или таймштампам, если они присутствуют, и смёрджить импортом, если структура доков не слишком сложная для экспорта и он правильно всё прохавает. На отдельном инстансе проверяется.
Nijat
если данных нет в бэкапах то восстановить неоткуда. разве что вы в логи писали данные и оттуда можно вытащить.
Данные есть в восстановленном образе. Просто у меня такая ситуация сложилась - у меня одновременно крутится два клона одной виртуалки с различающимися версиями одной и той же базы. И я не могу придумать, как синхронизироваться. Т.е. та, что сейчас в продакшене хранит данные вплоть до 29.06 03:00 и после 30.06 00:00 условно. В другой виртуалке есть данные до 29.06 22:00, но нет того, что после. Вот эту разницу мне как-то внести бы в продакшен.
Easy Rider
причем искать надо как раз-таки по id, а его нет. тупик
Nijat
Easy Rider
но вообще я с таким не сталкивался, т.к. всегда делаю свои id, монговские иды мне как-то не нравятся
Easy Rider
свой ид можно сделать очень хитрожопый, например, такой что только у тебя на беке есть функция, которая чекает, входит ли id в некое подмножество которое показывает что этот ид сгенерен легально. помогает предотвращать на уровне логики некоторые ддос атаки
Easy Rider
то есть мы просто не лезем в базу, если предварительно поняли что этот ид - не настоящий, и ниче такого в базе быть не может по определению
Brykez7
Так я и про это. Напишут в своих библиотеках.... Приходится его на API генерировать а потом в базу уже готовый отправлять
Brykez7
значит так задумано. но по идее, это глупо, ведь id должен быть в модели, а тут еще один запрос надо делать
Brykez7
причем искать надо как раз-таки по id, а его нет. тупик
Андрей
Андрей
токо сначала на тесте
Nijat
Спасибо, поизучаю вопрос!
Oleg
Всем привет. Подскажите, плиз, как вообще работает oplog? Не могу понять...
Сначала делаю фулл бэкап в директорию backup
Затем делаю изменения в бд, и делаю бэкап в директорию backup с флагом --oplog. Появляется файл oplog.bson.
Содержимое следующее
{"op":"n",
"ns":"",
"o":
"msg":{"periodic noop"},
"ts":{"$timestamp":{"t":1686761275,"i":1}},
"t":{"$numberLong":"6"},
"v":{"$numberLong":"2"},
"wall":{"$date":{"$numberLong":"1686761275306"}}}
Затем снова делаю изменения в монге, добавляю бд и коллекции. Запускаю mongodump с флагом —oplog. Файл oplog.bson просто перезатирается и не содержит информации, таймстамп о предыдущем бэкапе.
{"op":"n","ns":"",
"o":{"msg":"periodic noop"},
"ts":{"$timestamp":{"t":1686764685,"i":1}},
"t":{"$numberLong":"6"},
"v":{"$numberLong":"2"},
"wall":{"$date":{"$numberLong":"1686764685631"}}}
Так и должно быть или упускаю какие-то моменты?
Для фул бэкапа использую `mongodump --username backup_user --password backuppass12345 --host=rs0/mongodb-home-1:27017,mongodb-home-2:27017,mongodb-home-3:27017 --authenticationDatabase=admin --out=$(hostname)-$(date +%d%m%y)`
Для инкрементального `mongodump --username backup_user --password backuppass12345 --host=rs0/mongodb-home-1:27017,mongodb-home-2:27017,mongodb-home-3:27017 --authenticationDatabase=admin --out=$(hostname)-$(date +%d%m%y) --oplog`
yopp
Всем привет. Подскажите, плиз, как вообще работает oplog? Не могу понять...
Сначала делаю фулл бэкап в директорию backup
Затем делаю изменения в бд, и делаю бэкап в директорию backup с флагом --oplog. Появляется файл oplog.bson.
Содержимое следующее
{"op":"n",
"ns":"",
"o":
"msg":{"periodic noop"},
"ts":{"$timestamp":{"t":1686761275,"i":1}},
"t":{"$numberLong":"6"},
"v":{"$numberLong":"2"},
"wall":{"$date":{"$numberLong":"1686761275306"}}}
Затем снова делаю изменения в монге, добавляю бд и коллекции. Запускаю mongodump с флагом —oplog. Файл oplog.bson просто перезатирается и не содержит информации, таймстамп о предыдущем бэкапе.
{"op":"n","ns":"",
"o":{"msg":"periodic noop"},
"ts":{"$timestamp":{"t":1686764685,"i":1}},
"t":{"$numberLong":"6"},
"v":{"$numberLong":"2"},
"wall":{"$date":{"$numberLong":"1686764685631"}}}
Так и должно быть или упускаю какие-то моменты?
Для фул бэкапа использую `mongodump --username backup_user --password backuppass12345 --host=rs0/mongodb-home-1:27017,mongodb-home-2:27017,mongodb-home-3:27017 --authenticationDatabase=admin --out=$(hostname)-$(date +%d%m%y)`
Для инкрементального `mongodump --username backup_user --password backuppass12345 --host=rs0/mongodb-home-1:27017,mongodb-home-2:27017,mongodb-home-3:27017 --authenticationDatabase=admin --out=$(hostname)-$(date +%d%m%y) --oplog`
Да, oplog и содержимое коллекций при повторном вызове mongodump заменяется на новое содержимое базы на момент бэкапа
Oleg
yopp
Различные директории, в этом случае у вас будут срезы на момент бэкапа
Alexandr
всем привет
при аггрегации я пытаюсь передать переменную в $densify.range.unit
"$densify": {
"field": "_id",
"range": {
"step": 1,
"unit": "$time_unit",
"bounds": "full"
}
}
и получаю ошибку
unknown time unit value: $time_unit
при этом я передаю эту же переменную в $dateTrunc.unit и все работает ок
в чем может быть дело?
Vadzim
всем привет, у меня есть много баз данных и мне нужно сделать дамп всех за исключением одной бд( в которой находится две коллекции). Как я понял проигнорить при дампе конкретно одну бд нельзя , можно только коллекцию, используя аргумент excludeCollection. Но тогда приходится указывать аргумент db много раз, где необходимо перечислять все бд, которые у меня имеются. Можно ли как-то проще сделать?
Андрей
Oleg
Nick
Oleg
Oleg
.
Привет всем тут можно ссылку кидать?
Alexandr
Только не кидайте на локальную бд😅
Easy Rider
есть бесплатные расширения для браузера
Easy Rider
еще есть бесплатный сыр
Nurlan
купи самый дешевый хостинг и сам себе сделай )
Abdurazzoq
Abdurazzoq
По поводу этого wylsacom недавно видосик сделал, посмотри
Artem
Привет. Подскажите пж. Стэк: монга 6 + монгус и нода.
Так вышло что база упала (так и не понял почему), и заново не переподключилась пока вручную не перезапустил скрипт.
Соответственно скрипт работал и кидал запросы на базу, а она лежала и выходили ошибки.
Вопрос в том, как можно обезопаситься от таких ситуаций, на случай ночного падения базы, чтоб система условно заново реконнектнулась ?
Artem
База локально стоит
Андрей
Как обезопаситься от того, что вы не понимаете почему упала СУБД? Ответ в вопросе после запятой.
Nurlan
Nurlan
А так конечно Андрей выше праил но пишет что надо понять причину сначала
Artem
Artem
Но, разве есть совершенные системы которые не падают ?)
И допустим выявившуюся проблему я устранил, но это не гарантирует мне что «завтра» не вылезет следующая ночью и проект будет лежать до утра, разве нет ?)
Хочу просто обезопасить этот момень
Null
6.0.7 (Jun 28) ◦ 5.0.18 (May 18) • 4.4.22 (May 18)
🔥 Вышла версия 6.0.7 и релиз-кандидат 7.0.0-rc6
• Документация
• Официальный курсы: MongoDB University
• 🧑🔧 Консультации и поддержка MongoDB от 2190€ в месяц: @dd_bb
Stable: 6.0.7 (Jun 28) RC: 7.0.0-rc6 (June 28)
Bugfix: 5.0.18 (May 18)
Legacy: 4.4.22 (May 18, ☠️ Feb '24)
☠️ 4.2.24 (Apr '23), 4.0.28 (Apr '22), 3.6.23 (Mar ’21), 3.4.24 (Jan ‘20)
Alexander
Всем пис братья
Artem
Andrew
Добрый день дорогие колеги
Возможно кто-то сталкивался с похожий кейсом. Был бы очень признателен за совет.
я использую MEAN stack
И у меня возникли сложности при подключении к Mongo cloud https://cloud.mongodb.com/v2/
из приложения через nestjs/mongoose@10.0.0 or 9.2.2
const client = new MongoClient('mongodb+srv://username:password@hostname.fmq777h.mongodb.net/database');
await client.connect();
Error: querySrv ECONNREFUSED _mongodb._tcp.mongodb.net at QueryReqWrap.onresolve [as oncomplete] (node:internal/dns/promises:251:17)
Подключение к базе через Atlas все отлично (правда только через mongodb+srv://).
при использовании mongodb:// и стандартный порт 27017 подключиться не удаётся
Пробовал менять DNS на 8.8.8.8
Leonid
Всем привет. Может кто подскажет: какой командой добавить реплику к шарду? Хочу повысить отказоустойчивость. Новый сервер настроен и готов. Выполнять же все в роутере нужно?
yopp