Leonid
это очень функциональный инструмент
Anonymous
Leonid
Leonid
может оно тру по умолчанию
Ростислав ✚
Leonid
аа.
Leonid
из коробки такое вроде не поддерживается. нужно кодом if писать
Ростислав ✚
чере find ?
Leonid
я бы count использовал. его можно на индекс завязать. а find будет документ выгружать
Ростислав ✚
Leonid
👍
Dmitriy
Leonid
а если это штатная ситуация? каждый раз хэндлить эксепшн?
Leonid
оч дорого
Leonid
все равно. если у вас 50% должны "крэшится" это очень дорого.
Лучше проверить на наличии
Leonid
т.к. при генерации ошибки еще и контекст выполнения сериализуется.
Leonid
оч дорого
Dmitriy
крайне спорный момент, runtime приложения в большенстве случаев гораздо дешевле рантайма базы
Dmitriy
особенно если мы говорим про hl на который вы намекаете
Leonid
все равно будет больше оверхеда если мы наличие документа будем через try { insert } catch обрабатывать
Dmitriy
вы в любом случае каждый вызов к базе обрабатываете через error handling, т.к. ошибка может возникнуть в том числе и при получение count
Dmitriy
в зависимости от яп обработка может быть явная или неявная, но она есть
Leonid
все верно. но в случае явной ошибки в драйвере запускается куча оброботчиков в том числе сериализуется контекст и сама ошибка, это накладные расходы нежели вернуть count
yopp
yopp
Вообще вы советуете оптимизировать вещи, когда нет реальной проблемы
Ростислав ✚
У меня есть эндпоинт который принимает поток с клиента(большой csv) и через readline добавляет по одной строке в бд, но я так понимаю это не очень эффективно, можно как-то кусками в бд закидывать? Желательно без дубликатов
Anonymous
🤔
А можно как то рейзить из пайплайна ошибку если ничего не нашлось, а дальше ещё есть действия?
🤔
(Опционально, не всегда)
Nick
First
как правильно попгуглить, нужно
findOneAndUpdate({status: 'ok', counter < 5}
вот типо поле counter проверить
Nick
$lt
Nick
First
спасибо
First
await Accounts.findByIdAndUpdate(account._id, { $set: { cookies: {} } })
First
не ставит пустое поле, пробовал null и пустую строку
First
есть какая то особенность?
First
First
выше норм работает с айди, дока есть
First
undef тоже не ставит 🤔
Anonymous
Ростислав ✚
Тоесть записать все параметры в дополнительный парметр и получится уникальный?
Nick
Всем привет! Подскажите - есть mongodb в атласе, 1 кластер m30 replicas-set из 3 нод. Кластер расположен в 1 регионе (провайдер google cloud). Хочу масштабиовать кластер между разными регионами. Как я понимаю, для mongo размещенной в atlas достаточно через изменения кластера включить global writes и добавить необходимые зоны? При этом как произойдет масштабирование кластера? Буду благодарен любым советам\ссылкам.
Artem
Есть вопрос к сообществу по бест практис в пагинации. Мы реализовали fast-pagination по objectID (objectID > last_id + limit [https://scalegrid.io/blog/fast-paging-with-mongodb/]).
Но не учли, что в кластере (replica set) на каждой ноде генериуется разные objectID, что не позволяет их фильтровать по последнему полученному objectID.
Если рассматривать генерацию ID до вставки на клиенте, для сохранения последовательности, то там также несколько нод в балансировке.
Подскажите, пожалуйста, какие есть варианты “правильной” fast-pagination на кластере? Быстрый поиск не дал ответов на этот вопрос...
Vladimir
Artem
эм, как так на каждой реплике разные objectID?
Отличается все три части objectid, в зависимости от того на какую ноду пришел запрос на создание.
Вне зависимости от кластеризации _id должен расти последовательно? Я имею ввиду должна меняться только последняя часть _id.
Мы не задаём Id при создании на клиенте. Но ваш вопрос навёл меня на мысль, что может быть библиотека генерит сама его до вставки и в зависимости от ноды она выдает разный результат.
Vladimir
Отличается все три части objectid, в зависимости от того на какую ноду пришел запрос на создание.
Вне зависимости от кластеризации _id должен расти последовательно? Я имею ввиду должна меняться только последняя часть _id.
Мы не задаём Id при создании на клиенте. Но ваш вопрос навёл меня на мысль, что может быть библиотека генерит сама его до вставки и в зависимости от ноды она выдает разный результат.
А, в этом смысле, я просто подумал, что у Вас репликасет и каждая из реплик отдает для одной и той же записи разные ObjectID и решил, что я явно что-то упустил в этой жизни.
Но вообще:
https://docs.mongodb.com/manual/reference/method/ObjectId/
Если верить доке монги, то ObjectID (если он генерируется правильно, а не от фонаря), должен возрастать со временем. Т.е. по нему можно спокойно сортировать вне зависимости от того, на какой из нод он был сгенерирован (если считать, что везде часы правильные)
Vladimir
Ну или просто к записям добавить поле created: IsoDate(), индекс по нему и сортировать\ограничивать по этому полю, а не ObjectID, если все же окажется, что ObjectID не подходит по какой либо причине
Artem
Vladimir
Anonymous
А, в этом смысле, я просто подумал, что у Вас репликасет и каждая из реплик отдает для одной и той же записи разные ObjectID и решил, что я явно что-то упустил в этой жизни.
Но вообще:
https://docs.mongodb.com/manual/reference/method/ObjectId/
Если верить доке монги, то ObjectID (если он генерируется правильно, а не от фонаря), должен возрастать со временем. Т.е. по нему можно спокойно сортировать вне зависимости от того, на какой из нод он был сгенерирован (если считать, что везде часы правильные)
А если в качестве ключа используется timestamp, и чаще всего запросы заключаются в поиске недавних событий - получается сортировку лучше ставить обратную(-1 DESC) ?
Danila
Доброго дня. Не работал с mongo ранее. Установил mongod 4.2.2 на centos 7.
При попытке запустить через Systemctl в журналах выдает code:100. Но при всем при этом она вроде как работает, т.к. подключиться выходит. Не могу понять логику.
madspectator
А что показывает pstree -s <pid>, где <pid> это pid mongod процесса?
Ilya
День добрый, странный вопрос, может кто сталкивался.
Суть в том, что мне надо добавить для записей новое автоинкрементируемое поле что-то item_num : 1
Которое будет int от 1 до бесконечности
И чтобы оно всегда увеличивалось для новых записей
И если была запись с макс item_num : 55 ее удалили, чтобы следующая при создании атоматически получила item_num : 56 и были бы записи с item_num : 54 и 56
как-то так
Подскажите пожалуйста варианты для решения такой задачи?
Mike
Ilya
Mike
А можно более подробнее?
ну создаешь коллекцию для инкрементов)) при добавлении в нужную коллекцию, миддлварой model.pre('save') берешь инкремент и присваиваешь его для item_num и инкрементируешь инкремент (тавтология)
Ilya
Mike
yopp
yopp
Спросите сколько ресурсов он готов на это потратить
Ilya
yopp
Монга такое не поддерживает, вам придётся реализовывать счётчики самостоятельно. Если есть транзакции то через них. Если транзакции нет, то через write only $inc, когда вы делаете атомарную операцию инкремента чтоб прочитать следующее значение счетчика
yopp
Это больше чем сутки работы
yopp
yopp
Хост в hex
Ilya
_id 12битное заменили тупо интовым числом
Какое то УГ
Ilya
db.order_number.find_one_and_update(
filter={},
update={'$inc': {'number': 1}},
upsert=True,
projection={'number': True, '_id': False},
return_document=ReturnDocument.AFTER,
session=session
)
у нас так сделано, в коллекции лежит один документ и инкриментится у него поле number