Alexander
По идее, если вы просто запустили новый инстанс mongod и указали dbpath - старую папку dbpath, он должен подхватить все данные, а не половину.
of Astora 𒉭
По идее, если вы просто запустили новый инстанс mongod и указали dbpath - старую папку dbpath, он должен подхватить все данные, а не половину.
мы удалили все данные моного по его доке, а смогли восстановить данные благодаря людям у которых берём удаленный сервер
Alexander
Я немного запутался - вы сначала специально удалили данные, а потом передумали и решили восстановить? И ваш хостер предоставил вам старый бекап вашей машины, но там старая версия данных?
Nick
мы нечаянно удалили монго не на том сервере, попросили бекап у хостера, но они вчерашние, а нам нужно сегодняшний
Погоревать, определить как предотвратить такое в будущем, написать инструкции, довести до всех причастных
Nick
значит не получится восстановить данные?)
Вы же их удалили, они магическим образом ниоткуда не появятся. Все что из бэкапа достанете будет, остальное по логам приложения восстанавливать, если они у вас есть в подходящем виде.
Alex
Всем привет. Посоветуйте онлайн инструмент для дизайна бд, коллекции, типы данных, связи и всякое такое. Желательно бесплатное. Когда-то пользовался https://mongo.tools но он что-то протух Спасибо
Anton.
Ребята всем салют! Вопрос к тем кто юзал typegoose. 1) Почему он мне позволяет создавать пустой элемент хоть я и указал что есть required поля? 2) Почему все поля для него - any ?
Alikhan
Всем привет! У меня есть заказы и юзеры. Юзер может откликатся на заказы. Подскажите пожалуйста +- следующих решений. А если точнее: - какое решение правильнее - какое решение быстрее по производительности - какое решение не забьет базу 1 решение: Есть коллекция заказов: ordersCollection: [ { _id: '...', usersId: Ref(usersCollection)[], ... }, ... ] usersId - хранятся id юзеров которые сделали отклик. 2 решение: Создается новая коллекция: orderRespondedCollection: [ { _id: '...', userId: 'Ref(users), orderId: Ref(orders) }, ... ] В отличий от 1 решения, во 2 решений нету вложенности и для кажлого отклика создан свой документ.
Dmitry
В первом случае ты можешь под ограничение попасть т.к. лимит 16 МБ на 1 док. В втором случае, какая разница сколько у тебя там записей. Сделай индексы, а всё остальное монга возьмет на себя. Ты сможешь спокойно получать статистику для отчётов, что на такой-то заказ было то столько откликов или пользователь сделал отклики на вот эти заказы.
Dmitry
Вообще если есть возможность в один док всё впихнуть, то лучше впихнуть, но надо сразу обдумать возможные проблемы, которые могут возникнуть в будущем и удобно этим пользоваться / поддерживать.
Alexander
https://www.mongodb.com/time-series
Андрей
Привет. Есть кто успешно работает с бэкапами через Percona Monitoring&Management?
Андрей
Что - никто ни разу за столько лет не тискал PMM ни для ПГ, ни для Мускуля, ни для Монго? 🤨
Alexandrr
вопрос по mongoexport. (решён) юзаю os.system, то же самое что и cmd в шиндошс, только через питон. вопрос про экспорт. там в .json формате при экспорте автоматически включается поле _id. как ни пытался его исключить, не получилось. пробовал: 1. --fields - не исключает поле _id 2. --query '{}, {'my_field': 1, '_id': 0}' - не удаётся использовать из-за ошибок экранирования так как json принимает только двойные кавычки """, а их нужно экранировать для cmd, то как я только не пробовал варьировать экранирование, ошибку синтаксиса кидает и хоть ты убейся монга 5.0 клиент подключения 5.0 какие есть ещё варианты исключить _id поле из экспорта?
Alexandrr
Боюсь никак, только удалять из файла после экспорта
у меня такая кверя залетает в cmd: --query \"{}, {\"uuid\": 1, \"sub_category\": 1, \"_id\": 0}\" согласно доки экранирование выполнено верно для cmd, однако, получаю ошибку: is not valid JSON: invalid character ',' after top-level value
Андрей
Только постобработкой - правильно.
Nick
и в квери вы зачемто два json объекта пытаетесь упаковать
Alexandrr
что мешает внешние одинарные кавычки использовать?
ничего не мешает, но тогда cmd неверно считывает строку передавая её в mongoexport, получаю такую ошибку при одинарных кавычках: error parsing command line options: error parsing positional arguments: provide only one MongoDB connection string два объекта, как в случае с .find() где 1 объект, условие поиска, 2 условие проекции
Alexandrr
https://www.mongodb.com/docs/database-tools/mongoexport/#std-option-mongoexport.--fields and the _id field - and прям выделен, чтобы не пытались убрать
дичь конечно... придётся большой запрос писать похоже пытаться с проекцией внутри и всю эту дичь экранировать)
Alexandrr
а чем мешает _id?
ну как минимум отдавать файлы по 2 мб серверу на 5 млн пользователей или по 1.3 мб
Nick
ну как минимум отдавать файлы по 2 мб серверу на 5 млн пользователей или по 1.3 мб
интерсно что за кейс такой, что вы файлы отдаете пользователям, вместо предоставления сервиса
Андрей
Логично, что документный источник данных не будет выгружать документы встроенным средством без их идентификаторов. Что потом с этим экспортом делать? Документ без идентификатора как человек без головы 🤔
Alexandrr
интерсно что за кейс такой, что вы файлы отдаете пользователям, вместо предоставления сервиса
грубо говоря коллекцию-представление выгружаю каждые N_минут и жынкс раздаёт
Alexandrr
я конечно могу это делать и через само приложение потоком или процессом отдельным, но почему-то подумал, что специальная утилита будет это делать "более оптимизированно", чем мои кривые руки
Nick
грубо говоря коллекцию-представление выгружаю каждые N_минут и жынкс раздаёт
тот же вопрос, зачем там файл, а не сервис, который под запросу юзеру данные вернет из этого списка, и почему 2мб хуже чем 1.3Мб - оба хреново, т.к. больше 1кб
Alexandrr
тот же вопрос, зачем там файл, а не сервис, который под запросу юзеру данные вернет из этого списка, и почему 2мб хуже чем 1.3Мб - оба хреново, т.к. больше 1кб
ну а как по другому коллекцию = дерево отдавать пользователям? если есть варианты решения, буду рад обсудить
Nick
ну а как по другому коллекцию = дерево отдавать пользователям? если есть варианты решения, буду рад обсудить
вообще не могу понять почему не выдаются даныне под запрос, а делается выгрузка всего
Alexandrr
вообще не могу понять почему не выдаются даныне под запрос, а делается выгрузка всего
статический файл дёргать проще, чем постоянно в монгу ходить за всей коллекцией, разве нет?
Nick
обычный гет запрос, кэш и не надо думать о файлах какихто
Nick
статический файл дёргать проще, чем постоянно в монгу ходить за всей коллекцией, разве нет?
кажется если выгрузка каждые 5 минут, то файл не статический) раз в сутки еще может быть
Alexandrr
кажется если выгрузка каждые 5 минут, то файл не статический) раз в сутки еще может быть
каждые 15 минут, в коллекции много записей, порядка 50-100к будет через некоторое время. такое количество документов потом под каждый запрос будет невероятно сложно отдавать монге, по этому я хочу сгрузить это на жынкса
Андрей
Убрать текст по паттерну структуры - дело одного/двух условных сэдов в баше в постобработке по выгруженному файлу. Или я неправильно понял цель задачи?
Alexandrr
Убрать текст по паттерну структуры - дело одного/двух условных сэдов в баше в постобработке по выгруженному файлу. Или я неправильно понял цель задачи?
да похоже так и придётся решать задачу, только не через башик, а просто через само приложение отдельным потоком обработкой в фоне заниматься
Андрей
Единственное что - долго будет на большом объёме
Alexandrr
Единственное что - долго будет на большом объёме
просто там ещё память будет течь, но да ладно это уже оффтоп) спасибо всем кто принял участие в обсуждении, вопрос закрыт
Андрей
Можно в 15 минут и не уложиться и навалить нормальный такой оверхэд на тачку
Александр
Объясните, почему индекс не работает? mongodb 5.0, бд 700млн документов. есть такой индекс { key: { fieldTypesUpdated: 1 }, partialFilterExpression: { type: "paymentRequest" } } документов с {type: "paymentRequest"} мало, размер индекса всего 1.7мб нюанс в том что ни у одного документа поля fieldTypesUpdated нет тем не менее, я почему то считаю, что для запроса {type:"paymentRequest"} индекс должен использоваться, но этого не происходить. Почему?
mrFix
Приветствую. Есть aggregate: match -> lookup -> replaceRoot -> project -> limit Подскажите как добавить поле с общим кол-вом документов в выборке.
mrFix
$size
Что то никак( В replaceRoot или project?
Alexander
В конце отдельным stage и выведется только это число.
mrFix
Alexander
О том и речь, $size - это аггрегирующий stage. Если вам так сильно нужно получить количество документов вы можете сделать это в отдельном $facet
mrFix
О том и речь, $size - это аггрегирующий stage. Если вам так сильно нужно получить количество документов вы можете сделать это в отдельном $facet
Вообще для чего я все это затеял. Нужно число элементов для пагинации и сейчас приходиться делать два запроса. Вот я и подумал "может добавить один stage который будет добавлять число элементов в выборке, до того как дойдет очередь stage limit"
Alexander
Для pagination придется делать второй запрос в любом случае, это дешевле, чем запрашивать всякий раз в $facet
Alexander
Столько же :-), facet это по сути параллельный запрос в одном большом запросе
Alexander
Смотрите, чтобы получить количество документов - единственный вариант для базы данных, это выполнить запрос и посчитать сколько документов возвращается. В теории можно по быстрому получить оценку, но у вас 2 $match и $lookup между ними, боюсь тут нет других вариантов, кроме выполнения запроса
mrFix
Я надеялся что возможно какой нибудь count запилить и при replaceRoot увеличивать его, а потом toArray и из последнего элемента достать😁
vladissick
Ребят после (findOne, findById) методов есть возможность просто юзануть update метод на докумете поулченом? Или только через статические методы Модели?
vladissick
Класса целого
Alexander
У документа нет методов, это метод коллекции
vladissick
У документа нет методов, это метод коллекции
Окей) Не знал) Думал есть как в ларавеле подобное что-то
Alexander
Окей) Не знал) Думал есть как в ларавеле подобное что-то
Можно использовать библиотеку, которая обеспечивает подобную функциональность. Здесь много говорят о Mongoose, там вроде есть метод save() у документа, но это JS. А Laravel вроде PHP.
vladissick
просто недавно посидили на ларавел то я вот аналогию провожу с ним
mrFix
просто недавно посидили на ларавел то я вот аналогию провожу с ним
Тогда тебе только инструмент который дает абстракцию, а под капотом использует методы коллекции. Mongoose например
Alexandrr
главное не забывать, что вызовов чем больше, тем медленнее всё работает
Alexander
В качестве отвлечения, такой паттерн, когда объекты ORM обеспечивают функциональность работы с базой данных, как метод save(), называется Active Record был впервые введен Ruby on Rails, если я не ошибаюсь.