управлять параллельным доступом mongoDB - PullRequest
0 голосов
/ 30 января 2019

Мне нужно управлять параллельным доступом для обновления данных в mongoDB.Пример: два пользователя a и b подключаются к моему приложению.Пользователь a обновил данные, а пользователь b хочет обновить те же данные, которые уже обновил пользователь a, поэтому я хочу, чтобы пользователь b не мог обновить эти данные, поскольку он уже обновлен пользователем a.

1 Ответ

0 голосов
/ 30 января 2019

, если пользователь A и пользователь B обновляют только один документ, и вы можете знать начальное значение и обновленное значение, попробуйте этот код:

Код попытайтесь обновить поле secret ,, и мызнаю, что начальное значение expertSecret

public void compareAndSet(String expertSecret, String targetSecret) {
    // get a mongodb collection
    MongoCollection<Document> collection = client.getDatabase(DATABASE).getCollection(COLLECTION);
    BasicDBObject filter = new BasicDBObject();
    filter.append("secret", expertSecret);
    BasicDBObject update = new BasicDBObject();
    update.append("secret", targetSecret);
    collection.updateOne(filter, update);
}

Если не знаете начальное значение, как это сделать?

Вы можете добавить поледля репрезентативной операции, и перед обновлением проверьте поле.

Если необходимо обновить более одного документа, как это сделать? Для многодокументных транзакций требуется сервер mongo, чтобы получить дополнительную информацию от здесь

Однако в ситуациях, когда требуется обновление атомарности для обновлений нескольких документов или согласованность операций чтения с несколькими документами, MongoDB предоставляет возможность выполнять многодокументные транзакции с наборами реплик.Многодокументные транзакции могут использоваться в нескольких операциях, коллекциях, базах данных и документах.Многодокументные транзакции обеспечивают предложение «все или ничего».

...