Nick
Подскажите, можно ли сделать фильтрацию после того как сделал Populate без использования агрешации
если говорим о популейте, то это монгус, а монгус это сторона приложения, так что все что сможете накодить то и можно)
Michail
если говорим о популейте, то это монгус, а монгус это сторона приложения, так что все что сможете накодить то и можно)
Просто проблема в том, что я не пониаю как фильтровать по значениям которые появляются после применения populate
Nick
Просто проблема в том, что я не пониаю как фильтровать по значениям которые появляются после применения populate
возьмите данные после популейта, потом руками сделайте что хотите получить, потом немного кода по приведению одного к другому
Nick
просто составить json представление вручную, типа каков должен быт ьрезультат и понять что нажуно сделат ьс данными после популейта
Michail
просто составить json представление вручную, типа каков должен быт ьрезультат и понять что нажуно сделат ьс данными после популейта
Мне казалось, что если я буду делать с данными свои операции такие как documents.filter(), то это будет намного хуже, так Mongoose это все оптимизирует
Nick
монгус на этой стадии ничего не делает
Nick
его задача мапить данные в/из базы в запросах и немного синтаксического сахара по типу использования номральных классов
Michail
Тоесть Вы предлагаете мне тогда вручную делать фиьтрацию по моему результату?
Nick
да
Nick
и это нормально
Nick
хотя секундочку
Michail
Ну это очень странно, mongoose же создает индексы и тд
Michail
Точнее mongo
Nick
монго - база данных, mongoose - ODM, фреймворк-обертка над драйвером монги, упрощающая работу в стиле ООП
Michail
монго - база данных, mongoose - ODM, фреймворк-обертка над драйвером монги, упрощающая работу в стиле ООП
Не поможет, так как это запись будет фильтровать только те значения , которые полученные в populate
Aryn
Ребята, как достать только поле channels, где user_id=...? { _id: ..., user_id: ..., channels: [ { channel_id: 123, some: text }, { channel_id: 456, some: text } ] }
Aryn
Это невозможно?
Cloud
я тебе уже ответил, читай выше
Cloud
так извиняюсь, подумал тот же самый вопрос у find ты вторым параметром можешь указать, какие поля вытаскивать
Joe
Ребята, как достать только поле channels, где user_id=...? { _id: ..., user_id: ..., channels: [ { channel_id: 123, some: text }, { channel_id: 456, some: text } ] }
После квери передай объект { user_id: 1} но там будет юзерайди + айди, если нужно убрать, то _id: 0 еще добавь
Cloud
find({user_id: ...}, {channels: 1})
Cloud
А вообще советую почитать доку монги, там вполне доступные примеры
Joe
Ты кажется меня не понял
кажись, да, подумал, что тебе проекция просто нужна. Тут только если агрегацией, но никому не рекомендую ее, так что в коде только если)
Cloud
не работает
Дружище, формулируй пожалуйста вопросы и ответы полнее. Что именно тебе нужно сделать, и как именно не работает?
Михаил
Нужно получить это; { channel_id: 123, some: text }, { channel_id: 456, some: text }
А изначальный вариант? Что в базе в документе?
Joe
А чего не так с аггрегацией?
это не атомарная операция, а несколько (зависит от количества действий) операций + такие сложные запросы (требующие время на сборку и подготовку данных) лучше (даже в оф доке монги где-то читал, мб в блоге у них) отдельными мелкими запросами собрать и в коде юзать как надо, а агрегации нужны для аналитиков и как правило для большого количества данных и их лучше на какой-то реплике, которая синхронится от основной базы запускать для этих целей
Cloud
не работает
кинь скрин , где ты запрос пишешь плз
Михаил
https://t.me/mongodb_ru/97542
find({ channels: {$elemMatch: {channel_id: 123} }, {_id: 0, channels: 1})
Joe
Нужно получить это; { channel_id: 123, some: text }, { channel_id: 456, some: text }
но не получится так получить, он те вернет массив все равно в случае проекции (то что ты 2м параметром передаешь)
Михаил
да ну нет же
Тогда скрины плиз в студию
Aryn
ладно, забейте, сделал так: (хреновое решение, да) db.users.find_one({'user_id': user_id})['channels']
Михаил
Эм
Aryn
я так и думал сделать, просто думал как-то синтаксически получится
Joe
Эм
+1.
Михаил
``` findOne({user_id: '123'}, {_id: 0, channels: 1}) ```
Aryn
``` findOne({user_id: '123'}, {_id: 0, channels: 1}) ```
выводит {'channels': [...]} не то
Михаил
должно выводить [...] из channels
Ааааааа https://github.com/mongodb/mongo/pulls Вот здесь можешь сделать пулл реквест, ибо такого функционала нет)
Cloud
должно выводить [...] из channels
короч если ты работаешь с mongo shell или mongosh - просто дальше исопльзуешь js, как ты и сделал в проектах - средствами языка
Михаил
Тогда кину issusie)
Не, ну так будет не кошерно. Вот если ты им запилишь этот функционал - это прям красота будет)
Anonymous
Подскажите пожалуйста, какой софтиной можно сдампить открытую удаленную БД mongo?
Anonymous
выполняю команду: mongodump —host 161.97.78.251 —port 27017 в ответ получаю ошибку: Failed: error connecting to db server: no reachable servers хотя с сервером всё в порядке
Ilya
а креды
Anonymous
а креды
в монго они разве обязательны?
Igor
подскажите, как из js вставить объект чтобы одно из полей было _id и монга туда сгенерила айдишник новый?
Igor
пробовал добавить поле со значением null не прокатило так нулл и записался =))
Igor
через модели работать я норм научился, а сырой запрос - не умею такой
Igor
я тоже так думал
Igor
ок
Joe
я тоже так думал
Тогда код покажи
Igor
ручками написанный
Joe
ручками написанный
Ну весь код пишу руками)
Михаил
Дык монга если _id не передавать, то сама сгенерит
Это если у него сабдокумент же вроде А если он прямо пишет обьект в поле документа то вроде нет
Igor
через mongoose модели я взаимодействую с базой. сйечас миграцию рожаю
Igor
раз
Igor
само не пихает
Михаил
само не пихает
Сделай поле elements массивом со вложенными обьектами Должно начать пихать
Igor
не, мне надо чтобы items были массивом
Igor
вообще я задумался нужен ли тут id
Михаил
не, мне надо чтобы items были массивом
Просто не оч понятно зачем для одного обьекта айди
Igor
в принципе поле доступно через документ.elements
Igor
да, наверное не нужно
Igor
=)