-
а вот так работает, если указать явно единицу
И такое лучше через compass дебажить
-
Ой, не на ту строку посмотрел
sp
у меня есть 2 поля в документе. мне надо их сравнить. не получается
sp
{ $expr: { $gte: ["$movie.films.duration", "$endTIme"] } }
cпасибо огромное кажется работает
Evgeny
Всем привет. Я новичок в монге, подскажите, пожалуйста, в чём косяк может быть? В MongoDB Compass в фильтре пишу вот такой запрос: {'date': {$gte: ISODate('17 мая. 2023'),$lte: ISODate('24 июня. 2023')}} Но возвращаются пустые результаты, хотя такие записи точно есть. Поле date содержит строку типа date: "18 мая. 2023" Я думаю, что нужно значение строки в date как-то к дате преобразовать, но не пойму как
-
date: "18 мая. 2023"
Вот так написано?
-
Это названия поля
-
А если нажать на кнопку редактирования, отобразится тип
-
Слевой стороны
Evgeny
А если нажать на кнопку редактирования, отобразится тип
Тут тип не пишется, я так понимаю это просто строка
-
Тут тип не пишется, я так понимаю это просто строка
Если не знать какая версия у тебя compass и ты не говоришь тип, то по подстветки можно предположить, что у тебя строка. Когда ты её прокидываешь в ISODate, то он её конвертирует в 1970-01-01T00:00:00.000+00:00
-
Ок, это понятно. А само поле date, по которому идёт поиск, нужно в дату преобразовать, если там строка?
Наилучшем вариантом будет написать скрипт, который изменит тип данных на Date т.к. сейчас строка.
-
Понял, буду копать в этом направлении. Спасибо!
Это набросок и не более того, как можно написать скрипт. Если брать тот же JS/TS, то парсинг строки обязательный т.к. встроенный Date не понимает что такое "18 мая. 2023"
Slava
Всем привет! У меня есть 2 коллекции mongo (я использую mongoose): Collection Game { leaderboard: number[]; // userId } Collection User { userId: number; points: number; // в данном случае не важно, может быть любое число } Мне нужен способ обновить коллекции User с помощью коллекции Game Мне нужно пройтись по массиву leaderboard, сопоставить userId с User.userId и инкрементировать points (+1) Я не хочу выгружать leaderboard в RAM (если проще: не хочу, чтобы массив данных инициализировался в JS), потому что коллекция может быть размером в миллион пользователей Поэтому я ищу способ апдейта исключительно в среде mongo Как лучше всего это сделать? Возможно есть какие-то похожие на firebase.transaction методы или через bulk?`
sp
из за 287-295 нечитабельная ошибка. Кто то может подсказать что не так? если эти строки закоментить и раскоментить 286, то все ок
sp
код функции текстом напишите
речь о каких строчках? о теле функции? или обо всем что внутри function ( 289-293)?
Nick
речь о каких строчках? о теле функции? или обо всем что внутри function ( 289-293)?
сгонял в доку, в таком виде тоже поддерживаеет, значит ругается что аргумент не указан в args
sp
сгонял в доку, в таком виде тоже поддерживаеет, значит ругается что аргумент не указан в args
Точно не помню, пробовал ли я это запускать с указанным аргументом в массиве args. Если дело действительно в этом, то я знатно тупанул) энивэй спасибо за совет
-
Мм, а как же $merge ?
Не знал т.к. не сталкивался с задачей как у него, но если даже бы знал, но подумал как её сделать подругому заместо использования $merge т.к. всякое может случиться в процессе слияния
Pachka
Приветствую, подскажите пожалуйста как можно изменить поле в документе и сразу же в этой же "транзакции", в зависимости от этого поля изменять другие?
VinnyJ
Добрый день, подскажите, пожалуйста, не могу понять) есть запрос который как я понимаю должен или пушить в массив данных объект или создавать новую запись и пушить в нее Но оно почему то, когда нет такого юзера создает 2 записи в базе, а не одну, хотя отчитывается за 1 только const isUserExist = (await User.findOne({ email })) != null; await User.updateOne( { email, "api.key": { $ne: api?.key } }, { $push: { api } }, { upsert: !isUserExist }, ); { acknowledged: true, modifiedCount: 0, upsertedId: new ObjectId("64bfddbe75b135853a6be5e1"), upsertedCount: 1, matchedCount: 0 } В базе 2 записи в итоге с id "64bfddbe75b135853a6be5e1" и "64bfddbe75b135853a6be5e6"
VinnyJ
неконсистентно лучше будет insertOne если запись есть (судя по ошибке инсерта) - значит уже существует иначе успешный инсерт
спасибо, это не для постоянной работы, а для редкого запуска руками, ибо данные только в ручном режиме, но буду знать на будущее)
А
Доброго вечера всем, лучше использовать один клиент и несколько пулов в него или лучше постоянно создавать нового клиента для каждого подключения (база - монгодб)?
yopp
Доброго вечера всем, лучше использовать один клиент и несколько пулов в него или лучше постоянно создавать нового клиента для каждого подключения (база - монгодб)?
если вы про управление соедиенинями с монгой, то все официальные драйвера уже имеют встроенный коннекшен пул по этому на один процес, на один деплоймент монги (standalone/replica set/mongos) один инстанс клиента драйвера
А
тоесть клиент должен быть на одно веб приложение один - а подключений к базам несколько верно?
yopp
да, но вам не нужно управлять подключениями, драйвер всё сделает за вас
А
а стоит ли указывать в конфигах этого клиента максимальное и мин колво пулов? или драйвер тоже делает это за меня?
А
и ещё вопрос - как лучше распределять данные - много таблиц и одно дб или лучше равномерно распределить данные в разных дб где могут повторяться названия таблиц?
А
есть ли разница между mongoengine ОРМ и нативным драйвером Монго? *в плане производительности и других технических качеств
Andrey K.
и ещё вопрос - как лучше распределять данные - много таблиц и одно дб или лучше равномерно распределить данные в разных дб где могут повторяться названия таблиц?
Вопрос в объемах прежде всего и в характере нагрузки. Названия будут повторяться, допустим - а приложение при этом будет работать изолированно с данными, условно, Заказы-Москва, Заказы-Спб, Заказы-Казань, или будет работать с тремя коллекциями одновременно
Никита
Подскажите, пожалуйста, кто знает, как работает mongodump / mongorestore при переносе данных? К примеру, mongodump длится 1 час, использует ли mongodump snapshot isolation или данные в процессе могут поменяться? Не могу найти инфу на официальных доках
Никита
https://www.mongodb.com/docs/database-tools/mongodump/#std-option-mongodump.--oplog
А без oplog как будет работать, не знаете?
Nick
А без oplog как будет работать, не знаете?
Without --oplog , if there are write operations during the dump operation, the dump will not reflect a single moment in time. Changes made to the database during the update process can affect the output of the backup.
Nick
Хм, почему-то не увидел это. Огромное спасибо
в общем гарантий особых не будет без оплога
Egor
Кстати, если пошел разговор за бэкап/рестор... А есть ли возможность сделать репликацию отдельной базы с одного хоста на другой без replica set и вот этого всего. Чтобы эта репликация шла себе шла , а потом мы быстро подменяем connectionString и у нас продолжается работа уже с новым хостом MongoDB. В свое время с MySQL так делал, если память мне не изменяет. То есть я во время работы приложения, делаю дамп с фиксированием некоей позиции. Разворачиваю дамп на другом хосте. Запускаю репликацию с этой позиции. И, соответственно, потом переключаюсь с одого хоста на другой с минимальным временем простоя. С MongoDB можно такой трюк провернуть?
Air
я сейчас делаю mongoimport merge по своему string полю если я буду делать по _id полю процесс будет происходить быстрее или с такой же скоростью? надо merge 150к документов почти 3 часа шло
Air
на тестовой бд, где итак 150к а теперь на проде надо сделать там среди 6млн документов надо merge 150к
Nick
на тестовой бд, где итак 150к а теперь на проде надо сделать там среди 6млн документов надо merge 150к
каждый мерж дока по факту апдейт, так что это быстро не будет если упираетесь в системные ресурсы или в однопоточном режиме если все идет
Дима
Всем привет! Кто работал со сваггером, помогите, пожалуйста. Есть CreateAssetDto: (1 фото). Так же имеется @ApiBody: (2 Фото). Все работает так как надо, но когда задаю поля price, likes, rating в сваггере, вылезает ошибка (3 фото). Не понимаю как решить, вроде и там и там используется number
Дима
Дима
Дима
Air
--numInsertionWorkers=10 --numInsertionWorkers 10 я правильно понимаю что можно так и так?
Дима
ошибка про содержимое, что в полях передается?
Я передавал просто единицы для теста
Nick
Я передавал просто единицы для теста
просто приведите пример json
Дима
Подозреваю, что у вас цифры передаются как строка
я тоже так подумал, я пробовал так же формат задавать, тоже самое получилось
Ghost
Всем здравствуйте. В MongoDB можно реализовать вот такую штуку. Например, автор может иметь несколько книг, а книги могут входить в несколько жанров. Знаю, что такую штуку можно реализовать в реляционных бд, например, в postgresql. P.S. Решил размять мозги, сев на mongodb
Nick
Всем здравствуйте. В MongoDB можно реализовать вот такую штуку. Например, автор может иметь несколько книг, а книги могут входить в несколько жанров. Знаю, что такую штуку можно реализовать в реляционных бд, например, в postgresql. P.S. Решил размять мозги, сев на mongodb
Все тож самое по сути, только часто можно обойтись без связывающих таблиц а иногда и вовсе отказаться от допов упаковав все в большой док. Начните с раздела https://www.mongodb.com/docs/v5.0/data-modeling/
Ghost
Все тож самое по сути, только часто можно обойтись без связывающих таблиц а иногда и вовсе отказаться от допов упаковав все в большой док. Начните с раздела https://www.mongodb.com/docs/v5.0/data-modeling/
Спасибо. Просто не знал про эту штуку. Только знаю, что в mongodb можно создать, поискать и удалять строки. А вот типа один-ко-многим - нет. Начал учить этот mongodb.
Vadzim
всем привет, обновил монгу с 3 версии до 6. Смотрю на потребление оперативной памяти - монго практически всю съедает, возможно , конечно, так и до обновления было, но вряд ли. Может кто подскажет пожалуйста в какую сторону смотреть?