Ян 🌙
Nick
А он вытаскивает все элементы, независимо от id
Монга выдает документ, в котором нашлось свопадение по запросу
Ян 🌙
Монга выдает документ, в котором нашлось свопадение по запросу
ляя. а чтобы монга выплюнула именно объекты нельзя?
Ян 🌙
и именно с id 100
Nick
ляя. а чтобы монга выплюнула именно объекты нельзя?
Можно, берете агрегации и трансформируете как вам надо. Там же как раз можно через $filter оставить только нужные элементы в массиве
Ян 🌙
Туда нельзя передавать переменные?
Nick
Хз, с монгусом опыта не густо
Cloud
меньше паники больше читать доку и гуглить https://stackoverflow.com/questions/56113488/mongoose-5-x-disallows-passing-a-spread-of-operators
Ян 🌙
ДА это чухня..
Nick
ДА это чухня..
Собирайте пайплайн агрегации в виде массива
Cloud
открою секрет, в доку монгуса можно вообще почти не смотреть тупо делать все по доке монги и все будет работать скорее всего
Ян 🌙
Arguments must be aggregate pipeline operators
Ян 🌙
Хорошо хоть вообще что-то вытягивает
Ян 🌙
проще уже получить все, а средствами языка фильтровать
Ян 🌙
это же не должно быть так мучительно, чтобы получить кусок данных
Cloud
медленно работать будет
Cloud
не мучительно, ты просто не вник вникнешь будешь на раз два эти агрегации писать не паникуй
Nick
Arguments must be aggregate pipeline operators
https://docs.mongodb.com/manual/aggregation/, ознакомьтесь с агрегациями, как они работают и какие есть стейджи https://docs.mongodb.com/manual/reference/operator/aggregation-pipeline/#std-label-aggregation-pipeline-operator-reference и станет понятнее как делать нужные вам выборки с трансформациями
Nick
Если есть опыт в sql то в некоторых стейджах можно найти аналогичные запросы на sql для данной трансформации
Ян 🌙
да есть. но слышу о стейджах впервые
Cloud
ну как берешь и пишешь агрегации различные
Cloud
читаешь доку по операторам аггрекаций
Ян 🌙
прочитал)
Ян 🌙
undefined
Ян 🌙
пошло оно все в жопу) ради такого мозги себе колупать
Ян 🌙
Эти дебри явно не для меня, Find это мой потолок)
dnacd 🦜
ребят, привет как достать рандомные документы с монги без $sample ???
Leonid
Всем привет. А есть продвинутые техники инвестигейта кто сожрал все сессии в монге?)
Ян 🌙
Если у меня 2 одинаковых объекта, как удалить только один?
Alexander
deleteOne?
Ян 🌙
deleteOne?
не, у меня есть массив объектов, и именно в массиве нужно удалить
Ян 🌙
update $pull
Ян 🌙
но он удаляет все
Alexander
по индексу по идее можно
Ян 🌙
по индексу по идее можно
не, я не знаю индекса, мне ток приходят поля объектов
Nick
ребят, привет как достать рандомные документы с монги без $sample ???
формально обычная выборка возвращает "случайные" доки, если не указана сортировка, которая устраняет случайность. А так других вариантов нет
Константин
Привет. Я чайник, но надо очень узнать есть ли в базе пользователеи с одинаковыми телефонами. Кто может подсказать запрос для монги что бы найти дубликаты?
Roma
подскажите как вставить поле не в конце документа, а после определенного поля
Roma
я это через updateMany делаю
Roma
надо всем документам добавить поле в середине документа например
Roma
для визуального восприятия
Nick
для визуального восприятия
тогда что мешает в коде этот порядок выстроить как надо?
Roma
в том где юзается база? там это не имеет значения
Roma
в монгодб компасе чтобы было смотрибельно
Roma
вопрос конечно дикий, но это вообще возможно?
Ян 🌙
что значит в коде
в моделе, я так полагаю
Nick
вопрос конечно дикий, но это вообще возможно?
это не гарантируется, при добавлении нового дока обычно порядок полей сохраняется, после апдейтов - как повезет
Arcobalene
Всем привет, вопрос что делать если .wt сожрал все место на харде ?)
Андрей
Ребята, подскажите, что является лучшей практикой для проверки существования документа в коллекции перед добавлением , а то делать индекс с флагом unique и ловить ошибку выглядит как грязный хак, что предпочтительнее использовать find().limit(1), countDocuments() или что-то ещё?
Arcobalene
Что это вообще?)
Вроде как коллекция
Nick
Всем привет, вопрос что делать если .wt сожрал все место на харде ?)
Посмотреть размеры коллекций в базе, если это все данные, то расширять место хранения. Если реально в коллекциях много меньше данных, то можно скомпактить https://docs.mongodb.com/manual/reference/command/compact/
Nick
Что это вообще?)
Монга использует wiredtiger движок при работе с файлами на диске. Собственно коллекции и часть метаданных хранятся в формате этого движка и сами файлы имеют расширение .wt , подробнее https://docs.mongodb.com/manual/core/wiredtiger/
Nick
Ребята, подскажите, что является лучшей практикой для проверки существования документа в коллекции перед добавлением , а то делать индекс с флагом unique и ловить ошибку выглядит как грязный хак, что предпочтительнее использовать find().limit(1), countDocuments() или что-то ещё?
Если такое событие редкое, то индекс нормально е решение. Если ситуация очень частая, то возможно стоит глянуть в сторону upsert операций. Но в любом случае ни файнд ни каунт не решают проблему многопоточки и параллельного создания доков и в любом случае надо будет вешать индекс для предотвращения дублей и отлавливать ошибку
Leksey
всем привет! подскажите вопрос по дизайну был юзер с банальным параметром "balance" ok, икремент/декремент баланса при помощи транзакций появилась необходимость - анализировать баланс ok, добавили коллекцию "транзакции" (debit/credit, sum, desctiption, etc.) т.е. при покупки чего-либо со стороны пользователи выполняются действия: - списываем сумму { $inc: { balance: -N } } - создаем запись в коллекции транзакции - коммит вроде все нормально и работает бухгалтерия получает отчетность в виде: - пополнение - списание - и т.д. вопрос №1 нормальный подход при работе с балансом и коллекцией транзакции? вопрос №2 как быть, если необходимо теперь связать транзакции с покупками? бухгалтерия кроме текста "списание -100" хочет видеть что купил пользователь а кроме текста "пополнение +200" хочет видеть как пополнил пользователь тема обширная, подскажите идеи/статьи куда копать чтобы все связать с транзакциями
Nick
всем привет! подскажите вопрос по дизайну был юзер с банальным параметром "balance" ok, икремент/декремент баланса при помощи транзакций появилась необходимость - анализировать баланс ok, добавили коллекцию "транзакции" (debit/credit, sum, desctiption, etc.) т.е. при покупки чего-либо со стороны пользователи выполняются действия: - списываем сумму { $inc: { balance: -N } } - создаем запись в коллекции транзакции - коммит вроде все нормально и работает бухгалтерия получает отчетность в виде: - пополнение - списание - и т.д. вопрос №1 нормальный подход при работе с балансом и коллекцией транзакции? вопрос №2 как быть, если необходимо теперь связать транзакции с покупками? бухгалтерия кроме текста "списание -100" хочет видеть что купил пользователь а кроме текста "пополнение +200" хочет видеть как пополнил пользователь тема обширная, подскажите идеи/статьи куда копать чтобы все связать с транзакциями
1. нормально, кроме транзакций конечно можно перестроить все на идемпотентность, но это сложно будет 2. начать с определений что такое покупка, пополнение, где и как они фиксируются. Потом собрать список того что хотят видеть в результате по этим данным. Выбрать самую подходящую схему связывания (просто в виде ссылки, хранение внутри транзакции или вообще в стороннем хранилище уже предагрегированные данные)
Leksey
1. нормально, кроме транзакций конечно можно перестроить все на идемпотентность, но это сложно будет 2. начать с определений что такое покупка, пополнение, где и как они фиксируются. Потом собрать список того что хотят видеть в результате по этим данным. Выбрать самую подходящую схему связывания (просто в виде ссылки, хранение внутри транзакции или вообще в стороннем хранилище уже предагрегированные данные)
> 1. нормально, кроме транзакций конечно можно перестроить все на идемпотентность, но это сложно будет здесь не совсем понял "перестроить все на идемпотентность" о чем примерно может идти речь? попробую нагуглить, но от помощи не откажусь (статья или любое другое объяснение) > 2. начать с определений что такое покупка, пополнение, где и как они фиксируются. Потом собрать список того что хотят видеть в результате по этим данным. Выбрать самую подходящую схему связывания (просто в виде ссылки, хранение внутри транзакции или вообще в стороннем хранилище уже предагрегированные данные) примерно начал прикидывать, но кажется таким уродским решением есть транзакция (user, debit/credit, amount, description, createdAt, etc.) есть действие транзакции (transactionId, type: "deposit", "buyGame", "buyElectronic", depositId, gameId, electronicId, etc.) т.е. действие транзакции включает все возможные ID: - depositId - gameId - electronicId но только 1 id может быть указан выглядит стремно, все перерыл, не придумал ничего иного цель - бухгалтерия должна увидеть по транзакциям: - списание -100 (купил игру #gameId, вот описание) - пополнение +200 (пополнил #depositId, вот описание)
Nick
> 1. нормально, кроме транзакций конечно можно перестроить все на идемпотентность, но это сложно будет здесь не совсем понял "перестроить все на идемпотентность" о чем примерно может идти речь? попробую нагуглить, но от помощи не откажусь (статья или любое другое объяснение) > 2. начать с определений что такое покупка, пополнение, где и как они фиксируются. Потом собрать список того что хотят видеть в результате по этим данным. Выбрать самую подходящую схему связывания (просто в виде ссылки, хранение внутри транзакции или вообще в стороннем хранилище уже предагрегированные данные) примерно начал прикидывать, но кажется таким уродским решением есть транзакция (user, debit/credit, amount, description, createdAt, etc.) есть действие транзакции (transactionId, type: "deposit", "buyGame", "buyElectronic", depositId, gameId, electronicId, etc.) т.е. действие транзакции включает все возможные ID: - depositId - gameId - electronicId но только 1 id может быть указан выглядит стремно, все перерыл, не придумал ничего иного цель - бухгалтерия должна увидеть по транзакциям: - списание -100 (купил игру #gameId, вот описание) - пополнение +200 (пополнил #depositId, вот описание)
1. особо под рукой ничего нет, поэтому просто почитайте про идемпотентность, думаю пару статеек дадут понимание, а дальше только прикидывать как у себя можно это применить 2. так нормально выглядит, по id можно при необходимости подтянуть данные например по связанной игре. не совсем понятно хотите ли вы хранить транзакии и экшн в разных коллекциях, если да то в этом нет необходимости и можно просто сделать поле transactionAction:{type:.. , gameId:. ...} . Выборки в таком случае будут так же удобны как и в отдельной коллекции, но не придется собирать из разных коллекций данные
Leksey
1. особо под рукой ничего нет, поэтому просто почитайте про идемпотентность, думаю пару статеек дадут понимание, а дальше только прикидывать как у себя можно это применить 2. так нормально выглядит, по id можно при необходимости подтянуть данные например по связанной игре. не совсем понятно хотите ли вы хранить транзакии и экшн в разных коллекциях, если да то в этом нет необходимости и можно просто сделать поле transactionAction:{type:.. , gameId:. ...} . Выборки в таком случае будут так же удобны как и в отдельной коллекции, но не придется собирать из разных коллекций данные
> 1. особо под рукой ничего нет, поэтому просто почитайте про идемпотентность, думаю пару статеек дадут понимание, а дальше только прикидывать как у себя можно это применить понял, спасибо! 2. так нормально выглядит, по id можно при необходимости подтянуть данные например по связанной игре. не совсем понятно хотите ли вы хранить транзакии и экшн в разных коллекциях, если да то в этом нет необходимости и можно просто сделать поле transactionAction:{type:.. , gameId:. ...} . Выборки в таком случае будут так же удобны как и в отдельной коллекции, но не придется собирать из разных коллекций данные думаю что так сделаю collection transaction: - userId (ref) - type: String (debit/credit) - amount: Int - description: String - actions: { depositId (ref) gameId (ref) electronicId (ref) } да и не надо будет отдельно коллекцию тащить с экшенами + лукап побыстрее будет (избавляемся от доп. единицы)
Nick
> 1. особо под рукой ничего нет, поэтому просто почитайте про идемпотентность, думаю пару статеек дадут понимание, а дальше только прикидывать как у себя можно это применить понял, спасибо! 2. так нормально выглядит, по id можно при необходимости подтянуть данные например по связанной игре. не совсем понятно хотите ли вы хранить транзакии и экшн в разных коллекциях, если да то в этом нет необходимости и можно просто сделать поле transactionAction:{type:.. , gameId:. ...} . Выборки в таком случае будут так же удобны как и в отдельной коллекции, но не придется собирать из разных коллекций данные думаю что так сделаю collection transaction: - userId (ref) - type: String (debit/credit) - amount: Int - description: String - actions: { depositId (ref) gameId (ref) electronicId (ref) } да и не надо будет отдельно коллекцию тащить с экшенами + лукап побыстрее будет (избавляемся от доп. единицы)
только бы actionS без S, а то будет желание как с массивом работать. А при появлении массива уже начнутся трудности при которых уже можно рассматривать связанную табличку)
Leksey
> 1. особо под рукой ничего нет, поэтому просто почитайте про идемпотентность, думаю пару статеек дадут понимание, а дальше только прикидывать как у себя можно это применить понял, спасибо! 2. так нормально выглядит, по id можно при необходимости подтянуть данные например по связанной игре. не совсем понятно хотите ли вы хранить транзакии и экшн в разных коллекциях, если да то в этом нет необходимости и можно просто сделать поле transactionAction:{type:.. , gameId:. ...} . Выборки в таком случае будут так же удобны как и в отдельной коллекции, но не придется собирать из разных коллекций данные думаю что так сделаю collection transaction: - userId (ref) - type: String (debit/credit) - amount: Int - description: String - actions: { depositId (ref) gameId (ref) electronicId (ref) } да и не надо будет отдельно коллекцию тащить с экшенами + лукап побыстрее будет (избавляемся от доп. единицы)
а вот сразу интересно здесь какой-нибудь dynamic lookup возможен? или с учетом того, что у меня есть некая гарантия, что в action будет только 1 id, то можно сделать так: { '$lookup': { 'from': 'games', 'localField': 'gameId', 'foreignField': '_id', 'as': 'dataGame' }, { '$lookup': { 'from': 'deposits', 'localField': 'depositId', 'foreignField': '_id', 'as': 'dataDeposit' }, { '$lookup': { 'from': 'electronics', 'localField': 'electronic', 'foreignField': '_id', 'as': 'dataElectronic' } а так уже кодом
Leksey
не, динамик лукап не выйдет
Nick
а собирать его будет смысл если вы например делайте выборку по типу или например по игре, тогда можно однозначно собрать уменьшенный лукап
Leksey
а собирать его будет смысл если вы например делайте выборку по типу или например по игре, тогда можно однозначно собрать уменьшенный лукап
я сейчас как раз задумался об этом есть подтаск - фильтр для транзакций (типа выбрать определенные игры) только не понял в чем тогда проблема и зачем массив в целом делаем аггрегацию по id юзера лукапим все id (gameId, depositId, electronicId, etc.) далее матчим уже по лукап данным профит или я в силу неопытности потерял детали по пути видимо
Nick
тут недавно вопрос был как в массив на 3 уровне вложенности массива в массив прилукапить значения
Leksey
не забивайте себе голову массивом, эт я о своем)
понял пойду пробовать) спасибо большое!)
Sarvar
Привет! У меня такая проблема как исправить? MongoDb на платном тарифе
Alexander
Как подключаешь?