Nick
Подскажите, как это переписать для mongodb aggregate ?
попробуйте для начала просто в find условие выборки добавить, может этого уже хватит
Евгений
Админ если можешь, подскажи запрос У меня есть ыхема из спрошных стринговых полей так вот задача найти build в котором присутствуют одновременно несколько`suite`. и потом взять первые 10 элементов у которых присутствуют такие соврадения по build Я ничего лучше не придумал, как сделать DISTINCT по этим двум build c regex по suite А потом уже на back-end отфильтровал их для получения общей коллекции К сожалению не нашел реализации как в агрегации сделать сравнение по 2 выборкам вот к примеру сделал я $facet для получения двух коллекций как их смержить для получения совпадающих значений из двух массивов?
Nick
получается пайплайн основного запроса к нему слукапить с использованием пайпа второго запроса
Nick
там есть неплохие примеры с аналогами на sql для понимания
Евгений
спс, гляну я то и SQL уже давно не работал (((
Ilya
при Model .find() .populate({ path: 'user', match: { username: 'admin', }, }) .exec(); mongoose возвращает объекты, где user - null, что делать с этим?
Nick
а что не так?
Ilya
ну, по сути мне надо, чтобы можно было сделать .find({ 'user.username': 'admin' }), возможно ли это?
Nick
укажите в find что user должен быть заполнен
Ilya
так он везде есть
Nick
вы сами пишите что user - null
Антон
вы сами пишите что user - null
это скриншот ответа наверное
Ilya
Ilya
вот, первый документ он нашёл правильно
Ilya
либо я логику populate не так понимаю, либо это надо по-другому делать
Nick
так это нормально тогда, потом фильтруете там где не нуловое
Ilya
а если у меня записей 100000000000000000000млн?
Ilya
можно ли это сразу в монге отсортировать?
Nick
можно, используете aggregate и в нем на последнем шаге фильтр
Ilya
ща проверим
Ilya
пример из доки не работает
Ilya
почему
Anonymous
Вечер добрый. Как-то можно вычесть проценты из числа и сразу же обновить поле с этим числом? По типу $multiply
Александр
Добрый день. Подскажите пожалуйста, правильно ли задавать индекс для поля идентичный, как самое имя поля ?
yopp
Добрый день. Подскажите пожалуйста, правильно ли задавать индекс для поля идентичный, как самое имя поля ?
Первый аргумент это список ключей для индексирования. Ключ — имя поля, значение порядок сортировки: -1 по убыванию, 1 по возрастанию. странно что монга позволяет туда другие значения установить :) Имя задаётся через второй аргумент, куда передются опции индекса, через ключ name. https://docs.mongodb.com/manual/reference/method/db.collection.createIndex/#mongodb-method-db.collection.createIndex Пересоздайте индексы, сейчас они у вас созданы с некорректными настройками
yopp
Да
Александр
Да
А если делать aggregate без индексов, время аналогичное ?
Александр
Я до этого делал через курсор, просто find - у меня запрос 4 секунды длится, решил делать через aggregate
Александр
Да
Подскажите, где их создавать если не в схеме ?
yopp
Если вы используете mongoose, то скорее всего это метод index с аналогичными аруменами
yopp
unique false не обязательно задавать явно, по-умолчанию все индексы не уникальные
yopp
да, как видите под названием индекса теперь порядок отображается пиктограммой :)
yopp
слева 3 вместо порядка
yopp
тьфу, справа
Александр
слева 3 вместо порядка
так что это тройка значит ?
yopp
это неверное значение порядка сортировки
Александр
Понял, спасибо)
Подскажите пожалуйста, есть объект , который уже имеет поля userAdName, departament К этим полям я хочу добавить поле dateStart, которое находится в models , в models находятся sessions и вот тут мне нужно проверить startTime на условие, чтобы оно было равное переменой start и тогда получить объект с полями: userAdName, departament, dateStart. Справа код, который нужно взять за основу запроса.
Александр
Кто - нибудь поможет советом ?
Nick
Кто - нибудь поможет советом ?
В вашем случае надо поразбираться с возможностями БД, почитать доки, пописать запросы и трансформации - вообщем набраться опыта на базовых вещах, а потом уже переходить к реализации "сложного" функционала В частности на вопрос о профите в секундах просто невозможно ответить, не работая в вашем окружении и не зная ничего о нем, ваших данных и бизнес требованиях - слишком много факторов
Александр
Nick
двоеточие в названии поля после commonTime
Semeon
Это VS Code? Как ты так отступы подсветил?
Semeon
Спасибо!
Александр
двоеточие в названии поля после commonTime
Это работает, осталось проверить на равенство с переменной, как это сделать ? И если условие верно, взять из session три поля
Nick
если дата вбазе то сразу, если нет, то сначала преобразовываем
Nick
нет
Александр
нет
дата всегда будет
Nick
имелось ввиду что если в базе дата лежит в виде строки то потребуется еще преобразовать
Александр
пустой список приходит
Philipp
Ребят, пользую GridFS и сохраняю в него относительно большие документы (10-200Мб), соответственно каждый состоит из большого количества чанков. У меня вопрос, не лучше ли сохранять зипованые документы (жмутся примерно десятикратно), а потом при работе разжимать и всё? Что будет быстрее, собрать 100 метров разбросанных по чанкам или 10 метров и потом разархивировать на стороне Python?
Philipp
Спасибо ребят.
yopp
То есть смысла в том, что я предложил нет? (Надо прочитать, что такое snappy)
нет. нету. единственная разница это wire transfer. в случае с компрессией на стороне монги, данные по сети будут ехать уже разархивированные
yopp
и если включена wire compression, то они будут дважды архивироваться/деархивироваться
Philipp
и если включена wire compression, то они будут дважды архивироваться/деархивироваться
Дважды? Пришёл файл в апишку, я загоняю его в GridFS, данные пошли по соединению с монгой не архивированными, то есть, условные 100Мб, там они пожались до условных 10Мб и легли в коллекцию. Потом кто-то запрашивает данные, монга их разжимает и апишка получает их по соединению уже разжатыми, то есть, если монга где-то далеко, а не локально поднята в соседнем с апишкой контейнере, то лучше таки жать, так? Про wire transfer не читал, но из контекста могу предположить, что клиент сам жмёт что надо и передаёт пожатым по сети, так?
Александр
пустой список приходит
Как получить из второго варианта первый?
Александр
Другой вопрос, как вытащить эти поля из объекта, который прошел фильтр ?