Dima
Всем привет . Подскажите пожалуйста, не могу разобраться . мне для работы с mongo что нужно устанавливать
Dima
Мне нужно mongoDb compass
Алексей
Всем привет, помогите, пожалуйста, подсказкой. Есть три коллекции: A, B, C Каждый документ в коллекции A имеет поле "relation_field", которое содержит ссылку либо на документ из коллекции B, либо на документ из коллекции C. При помощи агрегации мне нужно вытащить все доки А + их поля relation_field. Это должен быть единый массив в данной агрегации для дальнейшей сортировки + пагинации. Я получается не могу в агрегации явно указать в лукапе в свойстве from откуда тянуть документ relation_field. Это как-то надо проверить и правильно вытянуть? Nestjs + mongodb + mongoose
Алексей
Спасибо большое, попробую.
Алексей
Сработало) Ещё раз спасибо. решение: aggregate([ { $lookup: { from: 'b', localField: 'relation_field', foreignField: '_id', as: 'bDocuments', }, }, { $lookup: { from: 'c', localField: 'relation_field', foreignField: '_id', as: 'cDocuments', }, }, { $project: { _id: 1, relation_field: 1, documents: { $concatArrays: ['$bDocuments', '$cDocuments'], }, }, }, { $unwind: '$documents', }, { $replaceRoot: { newRoot: '$documents', }, }, ]);
Ян 🌙
есть структура resources: [ {id:100}, {id: 100} ] updateOne({}, {$pull:{resources: {id: 100}} Удаляет все 2 объекта, как можно ограничить, чтобы удалил 1 объект?
Ян 🌙
{ multi: false } тоже не работает
Ян 🌙
как с ним бороться..
Ян 🌙
Повторы хотите удалять?
Нет, только один такой объект из массива, остальные чтобы остались
Ян 🌙
Но чтобы я не делал.. чистит все объекты, у которых id = 100
Ян 🌙
resources: [ {id:100}, {id: 100}, {id: 100}, {id:100} ] После апдейта было resources: [ {id:100}, {id: 100}, {id: 100}, ]
Nurlan
В каком смысле? Что ограничить?
Ну вы как определяете что некий объект надо удалить?
Nurlan
Ну их много вышло же. Дубликаты верно?
Ян 🌙
Ну их много вышло же. Дубликаты верно?
Да, дубликаты в каком то роде
Nurlan
Да, дубликаты в каком то роде
Ну вот. Как в таком случае монго поймет что вы не все хотите, а некоторые
Ян 🌙
Ну вот. Как в таком случае монго поймет что вы не все хотите, а некоторые
Ну вот я и спрашиваю как она должна понять, что нужно написать, какие ограничения
Ян 🌙
Может есть какие-то дополнительные ограничения, как вот ограничение на вытягивание данных, будет там максимум 10 записей
Ян 🌙
Точно так и тут, чтобы трогал лишь один объект, независимо есть ещё такие или нет
Ян 🌙
Или нет такого?
Nurlan
Думаю при селекте можно присваивать нумерацию и по нему фильтровпть для удаления. Как rowNum в sql
Nurlan
Подробнее можно?
Sry.не туда ушел я. Вы же можете просто выбрать first)
Nurlan
Давацте днем посмотрим вместе в лс даьше)
NO WAR!
Всем привет. Есть вот такая строка кода. В строке пытаюсь изменить свойство ordersCount у конкретного элемента массива, индекс которого уже знаю. VS Code выдает ошибку Property assignment expected, подчеркивая suppliers. Почему? Что не так? Service.findOneAndUpdate( {}, { $set: {`suppliers.${supplierIndex}.ordersCount`: ordersCount + 1 }}, )
NO WAR!
[`suppliers.${supplierIndex}.ordersCount`]
🤦‍♂️ Спасибо тебе, добрый человек.
Денис
Мне нужно сделать поиск записей по тегам, пока храню список тегов каждой записи в ещё одном поле в виде списка/массива Имеет ли это смысл, я не нашёл инфу о том, что массивы строк можно индексировать, если нет, то что делать? Сделать первый тег отдельным полем, второй тег тоже, а дальше уже фильтровать полученные результаты
Вячеслав
Добрый день, кто может подсказать почему в реплика сете перестали аплаится оплоги на реплику и как итог реплика лаг? Куда инвестигировать. В норму я привел рестартом реплик. Но хочу понять почему
Вячеслав
А какую телеметрию вы собираете?
Всю что mongodb_exporter собирает
Elvee
Всем привет! Подскажите как лучше хранить данные в монге? Есть сотни баз данных. Логически они разделены так: компания - база данных - документ. Мне лучше под каждую базу создавать отдельную базу или можно создать базу для компании и коллекции для баз данных которые входят в компанию?
Elvee
Количество документов в базах может достигать 100 млн. записей
Easy Rider
а база из чего состоит? не понятно
Easy Rider
судя по описанию, база это просто коллекция?
Elvee
а база из чего состоит? не понятно
Попытаюсь обьяснить. Сейчас у меня есть папки с названием компаний. В каждой папке есть базы данных пользователей. Их может быть несколько и они все с разными полями. Но между собой они НЕ связаны. Просто как отдельные базы
Elvee
это в монго как бы? или где? какие папки и что в них?
Это без монги сейчас. Я описываю то как они у меня сейчас лежат
Easy Rider
что за тип документа
Elvee
а где они лежат
на компьютере. Как файлы. Не в этом вопрос.
Elvee
Меня интересует как их логично записать в монгу? Монга / Мои данные ------------------------------ База данных = компания коллекция = база данных документ = инфа о пользоватле
Easy Rider
надо определиться с терминологией. в монго есть: 1. Сервер. Один сервер может содержать много баз данных 2. База данных. База данных может содержать много коллекций 3. Коллекция. Коллекция может содержать много документов. 4. Документ. Документ может содержать много полей
Easy Rider
ну сделай пока просто одну БД. В любом случае ее логично делать одну
Easy Rider
А дальше уже возможны варианты
Easy Rider
Да, с этим понятно. Можешь ещё выше сервера добавить кластер)
это физический уровень, он не имеет значения тут. Мы логический рассматриваем
Elvee
ну сделай пока просто одну БД. В любом случае ее логично делать одну
По твоей логике получаеться так: База данных содержит в себе просто коллекции, которые состоят из записей из баз компаний?
Easy Rider
не корректно как-то формулируешь, многозначительно
Elvee
всё сложно. Нужно подумать как ещё проще обьяснить. Сейчас
Андрей
Не надо от обратного заходить и всё будет понятно. Не метод хранения определяет логику обработки, а наоборот.
Андрей
А у вас вопрос "как хранить" с нулём информации о том, что делать с этим.
Андрей
Если просто хранить, то в файлах оно уже хорошо лежит 😄
Elvee
У меня на компьютере есть много папок с названиями компаний в которых хранится много баз данных пользователей. Базы данных пользоватлей могут содержать в себе как 100 записей так и 100 млн. Если мне нужно что-то найти - открывается отдельно база и выполняется поиск. Да, это пиздец. Но, как уже есть. Я хочу добавить все эти данные в монгу для того, чтобы мне было легко искать по всем базам нужные мне данные. Как мне логически организовать своё хранилище данных в монге?
Elvee
то есть ты открываешь папку, начинаешь вручную смотреть что там, листать документы ворд, всякие картинки и тд?
Например: хочу найти Сашу из компании Гугл. Открываю папку гугл, и по всем базам которые есть в этой папке ищу Сашу
Easy Rider
а что из себя представляют эти базы?
Elvee
а что из себя представляют эти базы?
набор данных: телефон, имя и т.д.
Easy Rider
в каком виде они хранятся, с помощью чего ты их открываешь?
Elvee
в каком виде они хранятся, с помощью чего ты их открываешь?
не понимаю смысла в этих вопросах) они не отвечают на главный вопрос. Ты подводишь к тому, что их нужно будет в json конвертировать
Easy Rider
конечно надо будет конвертировать во что-то, а как ты загонишь это в монго?
Elvee
конечно надо будет конвертировать во что-то, а как ты загонишь это в монго?
бля... упустим момент с тем что я знаю как их перегнать в json
Андрей
Одной коллекции достаточно.
Elvee
Одной коллекции достаточно.
в одной коллекции хранить несколько баз одной компании?
Easy Rider
короче, сделай так: сделай коллекцию с документом такого типа: 1. Имя компании 2. Имя человека 3. Ссылки на файлы 1 и 2 тип - текстовые, с фуллтекстовым индексом
Easy Rider
бля не точно описал, случайно Enter нажал
Easy Rider
Не, тут 2 коллекции надо, если не понятно как хранить доки, это могут быть просто файлы какие-то
Easy Rider
то в 1-й коллекции должны быть компания и имя во второй - файлы
Easy Rider
а если документ будет больше 16 мегабайт
Elvee
В одной коллекции хранить всё.
не логично. Что, если мне нужно удалить источник из компании?
Андрей
Не, тут 2 коллекции надо, если не понятно как хранить доки, это могут быть просто файлы какие-то
Зачем? У него полностью однородная информация, разложенная по папкам на диске. Он путает сам себя в понятиях.