Nick
Просто так поменять базу не выйдет
Мечтатель
понимаю
madspectator
Зачем с postgres на mongo переходить? Что это даст?
Ruslan
Какие ресурсы можете посоветовать для изучения монгодб, кроме документации?
Alexander
Leonid
Ruslan
Мне кажется там все просто - по верхам, а для более глубокого?
Alexander
вам кажется, там есть разнородные курсы на разные темы, разного уровня сложности и погружения.
Ruslan
Ок, а на русском есть что-то?
Nick
Murena
Именно
тогда еще вопрос - можно ли с помощью агрегации клонировать документ то есть делать его дубликат - с новым _id и изменять одно поле ?
Murena
чтоб также не выкачивать данные с бд - а чтоб внутри там все делалось )
Nick
Murena
Andrey
Привет, подскажите, пожалуйста.
У меня есть кластер из одного конфиг сервера, mongos'а и трёх шардов. Хочу удалить третий шард без потери данных. Выполняю db.adminCommand(removeShard), все документы с удаляемого шарда уходят на остальные. Если посмотреть getShardDistribution, то будет видно, что коллекция хранится на двух шардах, но в списке шардов в sh.status(), отображается 3 шарда. Должен ли он оттуда удаляться сам или нужно делать вручную?
First
Посдскажите, метод могуса фаиндэндапдейт "блокирует" документ? Необходимо брать с сортировкой по последнему использованию и обновлять дату, но чтобы инстансы не взяли один и тот же док
First
Или может необходима другая реализация
Murena
Всем привет - подскажите - почему библиотек которые предоставляют функционал миграций под монгу для Node.js очень мало - а те что есть то не очень популярны - это мало актуально для монги ? или многие сами пишут ?
Nick
Murena
Что вы под миграцией подразумеваете?
механизм внесения глобальных изменений в бд/коллекции - который можно накатить - или откатить.
удобно когда много человек работают над проектом
Murena
в php почти во всех популярных фреймворках это по дефолту есть - правда под SQL
Murena
а под монгу с нодой - пару либ каких то с 100 скачиваний в неделю нашел - или здесь как то по другому все должно быть ?
Nick
Это изза json и отсутвия схемы, вам прос о нет необходимости менять схему если ее нет (негр с пальцем.жпег)
Nick
Ваше приложение изначально должно разрабатываться с учетом того что поля могут отсутствовать или иметь разные типы данных в полях, если почемуто у вас так сложилось. Если зачемто вам нужно поменять тип у поля, то вы делаете новое поле, и либо пишете скрипт для конвертации данных, либо в прилодении проверяете есть ли значение в новом поле, если нет то используете из старого с конвертацией. Когда все доки обновятся, то вы просто убираете кусок кода, но само стврое поле не трогаете, пока не появится реадьная необходимость в этом
Murena
ясно, спасибо
Nick
Лучше скажите почему вам нужно откатывать изменения в схеме?
Ilya
Александр
https://pastebin.com/gcgEK5ZJ
Коллеги, есть такая схема данных.
Подскажите, каким образом построить запрос и вообще можно ли так, что бы можно было добавлять документы в массив orders конкретного клиента и можно ли их как-то редактировать и удалять? Или только вычитывать весь массив, что-то менять и обновлять его целиком
First
Ilya
Принял, спасибо 👌
Только обращаю ваше внимание, что блокировка документа произойдет лишь в том случае, если он действительно был изменен. К примеру, у вас в документе есть поле count: {count: 12}. Если вы примените апдейт к данному полю, по типу $set: {count: 12}, то блокировка не произойдет, так как база поймет, что поле уже имеет такое значение и изменять его бессмысленно, и, следовательно, документ не заблокируется. Я так пару раз уже обжегся, и теперь применяю в таких случаях оператор $inc - в этом случае я точно уверен, что документ изменится и заблокируется
First
Только обращаю ваше внимание, что блокировка документа произойдет лишь в том случае, если он действительно был изменен. К примеру, у вас в документе есть поле count: {count: 12}. Если вы примените апдейт к данному полю, по типу $set: {count: 12}, то блокировка не произойдет, так как база поймет, что поле уже имеет такое значение и изменять его бессмысленно, и, следовательно, документ не заблокируется. Я так пару раз уже обжегся, и теперь применяю в таких случаях оператор $inc - в этом случае я точно уверен, что документ изменится и заблокируется
Понял, но немного другая ситуация, будет браться и обновляться поле на date.now() а берется один документ с сортировкой по дате
First
Дкмал что может несколько потоков взять один и тот же док 🤔
Anonymous
Как можно вернуть id во время добовления записи?
Leonid
Anonymous
Ростислав ✚
Здравствуйте. Можно ли как-то в мангусте сделать что бы не добавлял в коллекцию объект если там уже находится идентичный? Или всё же сначала нужно использовать find прописав все свойства?
Leonid
вы какую комманду используете ?
Leonid
если update(f, b) где f - запрос для поиска обьекта на обновление и b - сам обьект
Leonid
он по умолчанию не создаст новый документ если третьим параметром upsert не добавить
Leonid
все верно
Anonymous
Привет. подскажите плиз кейс.
У меня есть две таблицы
Статьи и Авторы
У статьи есть ссылка на авторы
Мне надо выбрать статьи у которых автор допустим admin
Как мне лучше сделать? Сперва Aggregate(чтобы сделать left join) потом вытащить id из результаты и сделать обновление?
Leonid
почитайте в мануале монги про параметр upsert для понимания
Ростислав ✚
Leonid
Leonid
Leonid
ну в данном случае необходимо
aggregate[
matchAdmin,
lookup,
]
Leonid
или я не понимаю специфику вопроса
Leonid
это целый фреймворк со своим синтаксисом
yopp
yopp
найти автора, найти его статьи по author_id
Leonid
суть в том что бы обьединить операции в пайплайн
db.users.aggregate[{$match: {name: 'admin'}}, {$lookup : {from: 'news', localField: '_id', foreignField: 'author', as: 'articles' }}]
yopp
зачем
Anonymous
зачем
да я сам запуталься
Leonid
да я сам запуталься
стандартно - применить аггрегацию с лукапом.
Вернет вам обьедененные документы из разных коллекций удовлетворяющих условию "автор - админ"
Если нужно специфическое, то уже вертеть разные условия и направление лукапа
Leonid
думаю для большенства задач хватает
yopp
в этом случай в lookup нет никакого смысла
yopp
два последовательных запроса отлично решают поставленню задачу
Leonid
а что по времени? мне кажется за один прогон будет больше профита от аггрегации чем два раза ходить в базу
Anonymous
зачем
ну вспомнил запрос с sql
SELECT * FROM articles as t1 LEFT JOIN authors as t2 ON t1.author_id = t2.id WHERE t2.name = "Admin"
yopp
и в sql это не имеет смысла
yopp
Leonid
может быть это используется для отчета активности по пользователю,
Leonid
yopp
не надо тащить сложные инструменты туда, где хватате простых инструментов
yopp
как и sql
Leonid
если это ТО ЧТО ДЕЙСТВИТЕЛЬНО вы хотите.
yopp
там нет никакого практического смысла в том, чтоб делать join
yopp
сомневаюсь
yopp
если бы слово «автор» там было во множественном числе, то был бы ряд случаев когда join был бы более практичным чем два последовательных find
Leonid
Я как то на stackoverflow задал вопрос как разбить строку на массив без использования split , и меня жестко заминусили, потому что мой контекст был реально таков
Ростислав ✚
почитайте в мануале монги про параметр upsert для понимания
Я почитал документацию, но что-то оно работает не так как я думал.
await Info.findOneAndUpdate(infoObj, infoObj, {
upsert: true
});
Оно всё равно создаёт новые, в любом случае. Данные те же самые в первом и втором параметре
Anonymous
Leonid
конечно. но раз вы такое задаете рекомендую погуглить что такое вообще аггрегации монгодб