Ilya
В таком случае вам нужен linearizable или majority
Сейчас попробовал, но, к сожалению, это не помогло. Все еще возвращает пустоту.
yopp
Сейчас попробовал, но, к сожалению, это не помогло. Все еще возвращает пустоту.
Попробуйте выполнить чтение в колбэке транзакции, чтоб исключить вариант с тем, что у вас порядок выполнения запросов соответсвует вашей задаче
Никита
Всем привет! Подскажите, пожалуйста по правильной архитектуре. Использую noSQL БД - MongoDB Суть такая, хочу для музея создавать мероприятия, далее распределять мероприятия по дням , далее люди смогу из клинетской части записываться на события и оплачивать бронь (покупать билет) . Пользователь может забронировать сразу несколько разных мероприятий на разных датах. Получаются следующие модели в MongoDB: 1) Мероприятие, в схеме которого основные данные, вроде описания, длительности, максимальное количество человек, картинки и двусторонняя связь с Датами, на которых будет событие. 2) Дата, где количество записей на этот день, связанное с моделью Бронирования и связь с самим событием. Вопрос, нужно ли тут дублировать в схеме информацию из основного события, в виде длительности, названия и стоимости? Или просто отдельным запросом через связь получать информацию? 3) Бронирование, где уникальная ссылка, связь с Датой и Связь с пользователем. Вопрос, нужно ли дублировать информацию из связанной модели Даты или получать отдельным запросом? 4) Пользователь, связанный с бронированием. Такая организация сама по себе нормальна? Не избыточна?
yopp
Если данные становятся видимыми с задержкой, значит вы столкнулись с read isolation в find, так как в момент чтения транзакция ещё не стала видимой для клиентов
Ilya
Мне кажется, это происходит из-за того, что монга предоставляет write acknowledge журнала, а не непосредственно записей самой коллекции. Т.е. транзакция коммитится, когда журналы реплика сета отвечают, что успешно приняли и записали изменения в журнал (и потом они уже пишутся в сами коллекции). А из-за того, что доков целая куча, на запись всех их нужно больше времени, чем обычно, и возникает задержка.
Ilya
Единственный вопрос в том, что делать, если данные нужны сразу после транзакции, и есть ли возможность принудительно дождаться, чтобы все записалось хотя бы на primary?
yopp
Если у вас insert с writeConcern: majority и за ним идёт find с writeConcern: majority, то в случае если порядок операций именно такой, то find не может прочитать stale state, так как write операция получит ack только когда транзакция durable, а значит она была применена большинством реплик
yopp
а так как у find тоже writeConcern majority, то это гарантирует что курсор вернёт данные только с тем custer time, который позже write операции
yopp
с большой долей вероятности у вас проблема или с порядком операций или с concerns в драйвере
yopp
вам необходимо посмотреть на план запроса, с которым у вас проблемы. то что у вас на скриншоте, судя по всему, это выборка всех документов из коллекции
Ilya
с большой долей вероятности у вас проблема или с порядком операций или с concerns в драйвере
Только что тестил. Опции транзакции: { readConcern: { level: 'snapshot' }, writeConcern: { w: 'majority' }, readPreference: 'primary' } И вот что запихиваю в options для find (mongoose): {lean: true, readConcern: { level: 'majority' }, writeConcern: { w: 'majority' } } Все равно возращает пусто)) прям даже не знаю, в чем причина... что касается порядка операций, то там проверено, и все вызывается последовательно и с awaitaми.
Ilya
Если у вас insert с writeConcern: majority и за ним идёт find с writeConcern: majority, то в случае если порядок операций именно такой, то find не может прочитать stale state, так как write операция получит ack только когда транзакция durable, а значит она была применена большинством реплик
Это верно, только вот вопрос в том, что write concern подразумевает, судя по всему, acknowledge журнала, из которого операции insert надо еще непосредственно в базу перевалиться и выполниться. А когда идет чтение, учитывается ли журнал при этом? В общем, суть вопроса стоит вот в чем. Когда я запускаю find, смотрит ли монга на журнал, и ждет ли, пока выполнятся ли операции, которые должны быть выполнены в базе с указанным write concernoм, или же тупо читает то, что есть в коллекции и выплевывает обратно? Потому что на текущий момент мне кажется, что работает вариант номер 2.
yopp
majority это ack после того как изменения стали видимы в большинстве кластера и значит они не попадут под rollback
Ilya
majority это ack после того как изменения стали видимы в большинстве кластера и значит они не попадут под rollback
"видимы" - в том плане, что данные уже в коллекциях, а не в том, что на узел кластера записал эту операцию к себе в журнал?
yopp
After the write operation returns with a w: "majority" acknowledgment to the client, the client can read the result of that write with a "majority" readConcern.
yopp
"видимы" - в том плане, что данные уже в коллекциях, а не в том, что на узел кластера записал эту операцию к себе в журнал?
необходимо ещё определится с терминологией. в монге журнал это on-disk WAL, это настраивается отдельной опцией j
yopp
это влияет только на durability, т.е ack при j: true будет только тогда, когда операция была «записана» на диск в журнал
Али
Не по теме, извините, может кто кинуть ссылку на чат помощи Android если есть таковой?
Anonymous
"dependencies": { "@types/mongoose": "^5.10.3", "mongoose": "^5.11.19" } Warning: Accessing non-existent property 'MongoError' of module exports inside circular dependency С чем это связано? Или лучше в чат TypeScript/Js ?
Anonymous
Лучше код покажи, куда стэк трэйс ведёт
почитал - там чот постоянно какие то проблемы с драйверами возникают...
Joe
в mongodb ведет
Малоинформативно
Joe
Ты можешь стэктрейс полностью кинуть вместе с куском кода, который его вызывает
Joe
) код
А где этот монгоЭррор запрашивается?
Joe
ну точно не у меня )
Попробуй снести монгу и заново поставить
Joe
Ну и если у тсч то тайпинги не забудь поставить
Anonymous
Попробуй снести монгу и заново поставить
драйвер уже несколько раз переустанавливал в разных версиях
Anonymous
Ну и если у тсч то тайпинги не забудь поставить
ТС - тайпинги стоят - на первом посте видно
Joe
сервак чтоли? )
Нет. Модуль нпм
Joe
Интересно конечно
Joe
А гугл что пишет?
Anonymous
День добрый, как можно вывести все айдишники (idA) из массива в документе?
Anonymous
А гугл что пишет?
у них там периодически возникают проблемы с версиями драйверов. Даунграйд советуют часто - мне не помогло
WolderVsrat
у них там периодически возникают проблемы с версиями драйверов. Даунграйд советуют часто - мне не помогло
Есть такое, сталкивался с подобной ошибкой, что-то ему в подключении не нравилось, даунгрейднул значительно (пару минут, скажу на какую)
Anonymous
rewind
Есть где почитать про это?
Joe
Есть такое, сталкивался с подобной ошибкой, что-то ему в подключении не нравилось, даунгрейднул значительно (пару минут, скажу на какую)
Пишут что в курсе проблемы и решат в след. Релизах. Сейчас либо игнорить ворнинг либо понижать версию https://stackoverflow.com/questions/66185671/warning-accessing-non-existent-property-mongoerror-of-module-exports-inside-c
Anonymous
Есть где почитать про это?
в доках - aggregate. Поискать за Вас?
WolderVsrat
Я даунгрейдил настолько сильно "mongodb": "3.6.3", "mongoose": "5.10.0", Правда вижу. что без меня в проекте снова проапдгрейдили xD Возможно, что починили и можнр игнорить
WolderVsrat
Хотя вижу, что в 5.11.16, якобы, починили.. Но хз
WolderVsrat
Изначально пришел к даунгрейду отседова https://github.com/Automattic/mongoose/issues/9900
Anonymous
Хотя вижу, что в 5.11.16, якобы, починили.. Но хз
не зря я без mongoose всегда работаю
Melonges
всем привет, как на сайте монги смотреть посмотреть соедиржимое кластера?
WolderVsrat
не зря я без mongoose всегда работаю
На самом деле да, с развитием самого драйвера монги, монгус все больше становится не нужен
WolderVsrat
Тут уж и валидации под капотом у самой монги, и монгус зочим
Melonges
я бы использовал, но он на mac os очень криво сделан
Melonges
если свернул его то все, обратно не открывается, только перезапускать его
Максим
@dd_bb
Melonges
Я хочу
None
Доброго. Ребят, кто с монгой рабоатает прошу подсказать. Нужно сделать связь хода и игры (две сущности). Игра завязана на игрока и имеет ссылку на текущий ход, а у хода есть ссылка на игру. В итоге ошибка "UnhandledPromiseRejectionWarning: MongoError: Projection cannot have a mix of inclusion and exclusion." Т.е. он не может позволить так чудить. Может ли кто подсказать как лучше в данной ситуации обойти? Мне нужно в дальнейшем иметь возможность выбрать все ходы по ид игры. А в игре подхватывать текущий ход как связанное поле.
Vadim
День добрый, подскажите пожалуйста как в найденном документе переименовать одно поле и вернуть все остальные
Melonges
MongooseError: Operation users.insertOne() buffering timed out after 10000ms
Melonges
как решить?
Melonges
на локале запускаю
Евгений
а как сделать distinct с массивом regex чтобы подгребал все значения, подскажите пожалуйста
Евгений
чтобы оба значения попадали
Artem
Как хранить структуры вроде матриц в монге?
Dmitriy
а чем это не устроило?
Dmitriy
https://stackoverflow.com/questions/40526148/recursive-search-on-a-collection-in-mongodb
Nick
Как хранить структуры вроде матриц в монге?
зависит от ваших потребностей, что потом планируется делать с ними. Если это отдельные самостоятельные элементы со своей кучей свойств, то можно и как отдельные доки с указание позиции. Можно двумерные массивы если там просто числа. Можно комбинировать
Nick
это и так понятно, а надо ли выборки делать по элментам этой структуры?