Невозможно применить их с MongoDB без некоторого кодирования внешнего приложения.Единственный вопрос, который у меня возник бы выше, - почему бы не сделать Задачи частью пользовательского документа?Это устранило бы вашу проблему согласованности, поскольку вы могли бы обрабатывать пользователя и задачу атомарно.
Однако, если вы не можете, то, что я делал в прошлом, это использовал MySQL и поле версии для обеспечения согласованности,Каждое приложение отличается, но основная суть заключается в следующем:
1) каждый документ в Mongo имеет связанную строку в MySQL.Эта строка в MySql будет содержать коллекцию, идентификатор документа и некоторую информацию об аудите (последнее изменение, кто изменился и т. Д.) 2) определить, какие документы вам нужно заблокировать, а затем создать сериализуемую транзакцию в mysql.3) обновите записи в mongo, используя Find и update, и убедитесь, что поле версии совпадает, чтобы обеспечить оптимистичный параллелизм.4) если все завершится, то зафиксируйте транзакцию в mysql.5) если что-то пойдет не так, откатите все выполненные операции в монго.Если откат не может быть завершен, поместите информацию для отката в очередь сообщений и выполните отдельный процесс, который «очищает».6) откат транзакции mysql
Это нужно использовать экономно, так как это увеличивает нагрузку на ваши операции, однако, если вы встраиваете свои документы, как я описал с пользователем -> задача, вы должны найтичто вам действительно не нужно использовать это, за исключением некоторых внешних случаев или массовых обновлений.