Desalutar
Всем привет, есть схема продукта, у некоторых товаров есть скидочная цена(priceDiscount), как сделать так,чтобы когда происходило фильтрация, и если у продукта есть скидочная цена, то фильтровал именно по этой цене, а если нет, то по обычной ?
V
Всем привет 🙌🏻
Очень нужна помощь в восстановлении репликасета 🙏🏻
Коротко: 3 ноды, каждая в докер контейнере на разных нодах. 5ТБ данных
- Одна давно отвалилась, недавно запустили resync с праймари, сейчас она в Startup2 статусе
- Вторая отвалилась пару дней назад. Уходит в постоянных рестарт из-за duplicate key в config.transactions коллекции. За пятницу-субботу не получилось ее восстановить
- 3я нода отвалилась сегодня утром. Был oom, после поднятия она ушла в recovery. Судя по логам, recovery прошел, но монга не стартует, последние логи ниже
Может кто-то сталкивался с такой ситуацией как с 3й нодой? Можно ли ее как-то завести?
Если вдруг у кого-то есть возможность подключиться онлайн, было бы идеально 🙏🏻
{"t":{"$date":"2023-12-10T12:09:22.843+00:00"},"s":"I", "c":"STORAGE", "id":22430, "ctx":"initandlisten","msg":"WiredTiger message","attr":{"message":"[1702210162:843722][1:0x7fd27e380140], file:sizeStorer.wt, txn-recover: [WT_VERB_RECOVERY_PROGRESS] Recovering log 399667 through 399670"}}
{"t":{"$date":"2023-12-10T12:09:22.849+00:00"},"s":"I", "c":"STORAGE", "id":22430, "ctx":"initandlisten","msg":"WiredTiger message","attr":{"message":"[1702210162:849166][1:0x7fd27e380140], file:sizeStorer.wt, txn-recover: [WT_VERB_RECOVERY_PROGRESS] Recovering log 399668 through 399670"}}
{"t":{"$date":"2023-12-10T12:09:22.855+00:00"},"s":"I", "c":"STORAGE", "id":22430, "ctx":"initandlisten","msg":"WiredTiger message","attr":{"message":"[1702210162:855014][1:0x7fd27e380140], file:sizeStorer.wt, txn-recover: [WT_VERB_RECOVERY_PROGRESS] Recovering log 399669 through 399670"}}
{"t":{"$date":"2023-12-10T12:09:22.902+00:00"},"s":"I", "c":"STORAGE", "id":22430, "ctx":"initandlisten","msg":"WiredTiger message","attr":{"message":"[1702210162:902348][1:0x7fd27e380140], file:sizeStorer.wt, txn-recover: [WT_VERB_RECOVERY_PROGRESS] Recovering log 399670 through 399670"}}
{"t":{"$date":"2023-12-10T12:09:22.935+00:00"},"s":"I", "c":"STORAGE", "id":22430, "ctx":"initandlisten","msg":"WiredTiger message","attr":{"message":"[1702210162:935922][1:0x7fd27e380140], file:sizeStorer.wt, txn-recover: [WT_VERB_RECOVERY | WT_VERB_RECOVERY_PROGRESS] Set global recovery timestamp: (1701980628, 569)"}}
{"t":{"$date":"2023-12-10T12:09:22.935+00:00"},"s":"I", "c":"STORAGE", "id":22430, "ctx":"initandlisten","msg":"WiredTiger message","attr":{"message":"[1702210162:935981][1:0x7fd27e380140], file:sizeStorer.wt, txn-recover: [WT_VERB_RECOVERY | WT_VERB_RECOVERY_PROGRESS] Set global oldest timestamp: (1701980628, 569)"}}
Den
Всем привет! Не врублюсь, как правильно написать model.aggregate функцию так, чтобы искало по route, а мерджило по id=_id. Помогите 🙂
Collection A
{ id: ‘my_id’, route: ‘my_route’ }
Collection B
{ _id: ‘my_id’, field1, field2, ..., fieldN }
Ivan
Добрый день. Подскажите, хочу собрать кластер replica set режима из 4 узлов. при инициализации пишет: errmsg command replsetinitiate requires authentication mongo db. Что необходимо сделать, чтобы собрать, указать явно db.auth("username", "password") ?
Ящик водки
Нет, агрегации не работают медленее find.
тестировал на практике, разница в скорости примерно на 70%.
при skip до около 300 итераций
при skip более 1000-2000 разница сокращается и .find() замедляется, но по прежнему быстрее, примерно на 30%
и уже более 10000 когда, существенное время тратится на IOBytes transport latency, тогда время становится одинаковым.
количество тестирований 10000 тысяч в 1 круге, среднее время за 20 кругов при разных условиях загрузки ЦП каждые 5 кругов для усреднения времени.
а вопрос возник у меня такой, прежде чем проводить эти тесты и удостовериться, что .find() работает быстрее:
когда аггрегация возвращает результат после 1 пинка .next(), в то время как find только курсор, который потом ещё нужно пинать постоянно (итерировать) вплоть до StopIteration error - аггрегация должно однозначно работать быстрее, так как транспорт ввода/вывода проводится 1 раз (на самом деле 2, на формирование команды и пинок CommandCursor-a).
к тому же, возникала ещё 1 проблема - что драйвер pymongo был спроектирован разными людьми с разными стандартами в голове ответов, видимо...
по этому при итерировании через list() StopIteration исключение не вызывается и пришлось придумать дополнительно, как его получать.
на счёт второго, исключение очень просто получить:
достаточно получить от драйвера курсор, а потом его 1 раз пнуть.
если при .find().skip().limit() исключение не получено, то делаем вот так:
cursor = connect.get_collection().find().skip().limit()
[cursor.next() + list(cursor)]
если cursor.next() не возвращает исключение, значит итерирование с помощью list() и последующее сложение списков будет успешным.
Desalutar
Всем привет, реализовал пагинацию в mongoose, но проблема в том, что товары показываются рандомно, т.е. один и тот же товар может быть в другом списке, как это можно исправить ?