мне нужно управлять параллельным доступом для обновлений данных в mongoDB. Пример: два пользователя a и b подключаются к моему приложению. Пользователь a обновил данные, а пользователь b хочет обновить те же данные, которые уже обновил пользователь a, поэтому я хочу, чтобы пользователь b не мог обновить эти данные, потому что они уже обновлены пользователем a.
@TongChen, пожалуйста, не могли бы вы привести пример использования compareAndSet
Возможно, взгляните на аннотацию javax.persistence @Version. stackoverflow.com/questions/10648515/…




если пользователь A и пользователь B обновляют только один документ, и вы можете знать начальное значение и обновленное значение, попробуйте этот код:
Код пытается обновить поле секрет, и мы знаем, что начальное значение равно экспертСекрет.
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, получите дополнительную информацию от здесь.
However, for situations that require atomicity for updates to multiple documents or consistency between reads to multiple documents, MongoDB provides the ability to perform multi-document transactions against replica sets. Multi-document transactions can be used across multiple operations, collections, databases, and documents. Multi-document transactions provide an “all-or-nothing” proposition.
спасибо, я постараюсь добавить поле и проверить его, прежде чем делать обновление. Есть ли способ создать последовательность в mongodb с данными Spring, которые автоматически увеличиваются после каждого обновления или вставки?
Mongodb имеет оператора $inc, вы можете найти ту же операцию в Spring Data.
попробуйте использовать операцию
compareAndSe