Dmitry
populate
Это если find т.к. у mongoose есть метод. Либо lookup через aggregation
Артем
Привет, ребят, есть ли возможность как либо восстановить коллекцию ? mongod с флагом repair восстановил всю базу данных, кроме двух самых важных коллекций Теперь есть два файла .wt.corrupted
Артем
Данные очень важны, база 2 миллионов+ пользователей и 700к+ транзакций (успешных порядка трети) Есть бэкап, которому порядка 40 часов, но хотелось бы актуальные данные вытянуть Повреждение диска было в 2 по мск где-то(
Артем
Не было) Безответственно подошли к инфраструктуре, не поменяли всё вовремя, когда проект разросся Но уже не откатить назад
Vyacheslav
угу, это понятно
Артем
сейчас видимо буду именно эти две коллекции из бэкапа брать
Vyacheslav
а версия монги какая?
Артем
не то чтобы мегакритична потеря двух дней, мы не платежная система, но очень неприятно
Vyacheslav
тогда не подскажу, есть пара советов для старых версий
Vyacheslav
но это прям новая
Артем
ну новая 6.0, но у нас она на дедике не поддерживается по процессору что-ли там проблема или что-то такое
Артем
5.* по такой же причине не смогли поставить
Vyacheslav
к 4й версии улучшили импорт сломанных файлов
Vyacheslav
выше 4й нет смысла обновлять, если repair все не подтянул
Артем
я читал об этом, но repair чот не восстановил, к сожалению
Артем
при чем судя по весу файла там всё ок с содержанием
Vyacheslav
могу предложить hex редактор))
Артем
ахха, бл) файл весом гига в 4)))
Vyacheslav
ахха, бл) файл весом гига в 4)))
сначала найти паттерн
Vyacheslav
и скриптом распарсить)
Alexander
Никогда такого не делал, но в MongoDB storage engine - это WiredTiger, у него есть своя утилита wt, которая в частности имеет опцию salvage - она может вытягивать данные из повреждённых коллекций. Попробуйте, может получится https://source.wiredtiger.com/11.1.0/command_line.html#util_salvage
Артем
Восстановил коллекции с бэкапа, а дальше данные собрал с логов оплат + логов вызовов оплат
Артем
Вроде гуд
Alexander
Ага, звучит правильно
Alexander
Восстановил коллекции с бэкапа, а дальше данные собрал с логов оплат + логов вызовов оплат
Это немного оффтопик, но я бы задумался о включении репликации в MongoDB - падение дисков скорее правило, чем исключение.
Артем
Это немного оффтопик, но я бы задумался о включении репликации в MongoDB - падение дисков скорее правило, чем исключение.
Я понимаю, да Будем брать новые сервера для проекта Все откладывали переезд просто из-за высокого темпа обновлений
Артем
Вышло боком)
First Name
Парни, как реализовать следующую логику: в запросе приходит _id книги, в которой я хочу изменить значение поля date с числа на строку (date:1984 на date:'1984') Приведенный ниже способ не работает (получаю date:"undefined")
First Name
Получилось только так
First Name
findoneandupdate
Спасибо, забыл про этот метод
First Name
findoneandupdate
а как мне получить в String(date из найденной книги)?
Alexandrr
а как мне получить в String(date из найденной книги)?
хороший вопрос, я не знаю, надо гуглить
Артем
$toString мб?
Артем
db.collection.updateMany( { a : { $type: 1 } }, [{ $set: { a: { $toString: "$a" } } }] )
Alexandrr
по идее setType есть какой-то для поля
First Name
$toString мб?
не знал про этот оператор, сейчас посмотрю
Nick
обычный апдейт не может использовать значения полей из изменяемого документа. Чтобы такое првоернуть надо использовать апдейт с пайплайном агрегации, что выше как раз и предложили (пайп в квадратных скобках). Собственно $toString это оператор агрегации
Ivan
какую ошибку нужно угадать?)
Ivan
там кроме включения флага, вроде еще файл какой-то нужен с ключем
Alexander
Да нет, достаточно правильно созданного пользователя и флага https://www.mongodb.com/features/mongodb-authentication
Vladislav
Привет) Я хочу заменить массив objectId нормальными объектами из другой коллекции. Для этого судя по всему мне нужен $lookup. Если просто в коллекции массив айдишек, то все понятно. Но у меня массив объектов, в котором есть массив этих айдишек. И я никак не могу понять, как правильно написать запрос. Моя цель - modifiersIds превратить в modifiers, который будем массивом объектов (документов) из другой коллекции. Может кто подсказать, как такое сделать?
Ivan
попробуй руками запустить сервер
Alexander
Yaml ещё и не такие вольности позволяет
Alexander
Вот за это я и не люблю Yaml 😳
Vladislav
Боюсь вам понадобится $unwind перед $lookup
Тоже пытался, но пока не понял, как собрать потом обратно)
Alexander
$group по _id, и для обычных полей наверное лучше использовать $first
Alexander
ChatGPT просто мощь. Можно без unwind
https://github.com/mongodb/mongo/commit/f23e588c180cc1a2ae79b9cbf6a4ba2a196ee215
Alexander
В русскоязычном чате MongoDB определенно интереснее, в англоязычном в основном собрались люди для которых открыть сайт MongoDB - уже достижение, а здесь постоянно что-то узнаю новое :)
Vladislav
ChatGPT просто мощь. Можно без unwind
Блин, что-то монгла сложная местами. Вот это действительно работает в админке MongoDB Atlas (там где aggregate можно собрать). В реальности же все специфичные поля типа objectid или date прилетают как объекты типа {"$oid":"643d7f57a6c97f5e28f92f3b"},"createdAt":{"$date":"2023-04-17T17:18:15.854Z"} Как это пофиксать? Нашел, что есть оператор $toString, но мне что ли на каждое поле его писать?
First Name
Парни, а можно в mongo заменить ключ _id на просто id? в самой базе данных?
First Name
А с какой целью ?
Просто, не нравится.
RapidCodeLab
Просто, не нравится.
Это не выглядит как решение какой-то задачи
First Name
Это не выглядит как решение какой-то задачи
На клиент приходит _id? можно переименовать, но тогда можно и запутаться
Alexander
Многие драйвера позволяют задавать маппинг для имён полей, можно задать такой, что на клиенте он будет десериализовываться в другое имя. Но на самом сервере он всегда будет _id, это имя зашито в коде.
Alexander
В C# модно задать маппинг с помощью атрибутов, вот к примеру Identifier вместо _id. public class House { [BsonId] public string Identifier { get; set; } } https://www.mongodb.com/docs/drivers/csharp/current/fundamentals/data-formats/poco/#set-field-names
Mark
Привет, кто нибудь настраивал ключ шардирования на mongodb? Можно ли использовать в качестве ключа поле _id?
Andrey K.
Привет, кто нибудь настраивал ключ шардирования на mongodb? Можно ли использовать в качестве ключа поле _id?
Да, можно. You can choose _id as shard key but there are complication such as Most recent data moves to single shard, old data will be residing in other shards.
Egor
Ребят салют, подскажите пожалуйста тул для миграции! Хочется функционал на подобие тайп орм, где ты когда модели меняешь, скриптом генеритсч миграция
Alexander
Ребят салют, подскажите пожалуйста тул для миграции! Хочется функционал на подобие тайп орм, где ты когда модели меняешь, скриптом генеритсч миграция
Вся идея документных баз данных данных в том, чтобы дать естественную для программистов модель данных, позволяющую избавиться от ужасных хаков реляционного мира - типа ORM или тех же автогенеренных скриптов миграции.
Егор
Добрый день, дамы и господа, у меня тут возник вопрос... Есть-ли где-то гайд как сделать кластер MongoDB из 3-х нод, и чтоб в случае падения одной, мастер переключался на другую? С монго до этого работал только в единичном экземпляре, кластер не трогал вообще
RapidCodeLab
Можно посмотреть ansible роли для монго кластера и оттуда понять как делать, в гитхабе есть
RapidCodeLab
Или просто взять роль и накатить по ней