Dmitry
populate
Это если find т.к. у mongoose есть метод. Либо lookup через aggregation
Артем
Привет, ребят, есть ли возможность как либо восстановить коллекцию ?
mongod с флагом repair восстановил всю базу данных, кроме двух самых важных коллекций
Теперь есть два файла .wt.corrupted
Артем
Данные очень важны, база 2 миллионов+ пользователей и 700к+ транзакций (успешных порядка трети)
Есть бэкап, которому порядка 40 часов, но хотелось бы актуальные данные вытянуть
Повреждение диска было в 2 по мск где-то(
Vyacheslav
Артем
Не было)
Безответственно подошли к инфраструктуре, не поменяли всё вовремя, когда проект разросся
Но уже не откатить назад
Vyacheslav
угу, это понятно
Артем
сейчас видимо буду именно эти две коллекции из бэкапа брать
Vyacheslav
а версия монги какая?
Артем
не то чтобы мегакритична потеря двух дней, мы не платежная система, но очень неприятно
Артем
Vyacheslav
тогда не подскажу, есть пара советов для старых версий
Vyacheslav
но это прям новая
Евгений
Артем
ну новая 6.0, но у нас она на дедике не поддерживается
по процессору что-ли там проблема или что-то такое
Евгений
Артем
5.* по такой же причине не смогли поставить
Vyacheslav
Vyacheslav
к 4й версии улучшили импорт сломанных файлов
Vyacheslav
выше 4й нет смысла обновлять, если repair все не подтянул
Артем
я читал об этом, но repair чот не восстановил, к сожалению
Артем
при чем судя по весу файла там всё ок с содержанием
Vyacheslav
могу предложить hex редактор))
Артем
ахха, бл)
файл весом гига в 4)))
Vyacheslav
Vyacheslav
и скриптом распарсить)
Alexander
Никогда такого не делал, но в MongoDB storage engine - это WiredTiger, у него есть своя утилита wt, которая в частности имеет опцию salvage - она может вытягивать данные из повреждённых коллекций. Попробуйте, может получится
https://source.wiredtiger.com/11.1.0/command_line.html#util_salvage
Артем
Артем
Восстановил коллекции с бэкапа, а дальше данные собрал с логов оплат + логов вызовов оплат
Артем
Вроде гуд
Alexander
Ага, звучит правильно
Артем
Артем
Вышло боком)
First Name
Парни, как реализовать следующую логику: в запросе приходит _id книги, в которой я хочу изменить значение поля date с числа на строку (date:1984 на date:'1984') Приведенный ниже способ не работает (получаю date:"undefined")
First Name
Alexandrr
First Name
findoneandupdate
а как мне получить в String(date из найденной книги)?
First Name
Alexandrr
Артем
$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 😳
Alexander
Alexander
Alexander
$group по _id, и для обычных полей наверное лучше использовать $first
Vladislav
Alexander
В русскоязычном чате MongoDB определенно интереснее, в англоязычном в основном собрались люди для которых открыть сайт MongoDB - уже достижение, а здесь постоянно что-то узнаю новое :)
Vladislav
ChatGPT просто мощь. Можно без unwind
Блин, что-то монгла сложная местами. Вот это действительно работает в админке MongoDB Atlas (там где aggregate можно собрать). В реальности же все специфичные поля типа objectid или date прилетают как объекты типа {"$oid":"643d7f57a6c97f5e28f92f3b"},"createdAt":{"$date":"2023-04-17T17:18:15.854Z"}
Как это пофиксать? Нашел, что есть оператор $toString, но мне что ли на каждое поле его писать?
Alexander
Vladislav
First Name
Парни, а можно в mongo заменить ключ _id на просто id? в самой базе данных?
RapidCodeLab
Нефор
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.
Egor
Ребят салют, подскажите пожалуйста тул для миграции!
Хочется функционал на подобие тайп орм, где ты когда модели меняешь, скриптом генеритсч миграция
Артем
Егор
Добрый день, дамы и господа, у меня тут возник вопрос...
Есть-ли где-то гайд как сделать кластер MongoDB из 3-х нод, и чтоб в случае падения одной, мастер переключался на другую?
С монго до этого работал только в единичном экземпляре, кластер не трогал вообще
Артем
RapidCodeLab
Можно посмотреть ansible роли для монго кластера и оттуда понять как делать, в гитхабе есть
RapidCodeLab
Или просто взять роль и накатить по ней