С настройкой модели документа вы можете получить что-то вроде этого:
{
"name": "n",
"age": 22,
"applied_hashes": {
"XyRZHDJJD6738": null,
"AB2343DCxdsAd": null,
// ... other hashes
}
}
Теперь вы можете выполнять каждое обновление как операцию с дополнительным документом, с первой попыткой c. и вставьте ха sh обновления в apply_hashes. Если этот хеш / обновление был ранее применен, то эта вставка завершится неудачно, и, поскольку Поддокумент имеет атомарный характер c, в документ не будут внесены изменения.
С Java SDK 3.x this выглядит так:
try {
collection.mutateIn("id",
Arrays.asList(
MutateInSpec.insert("applied_hashes.XyRZHDJJD6738", null).createPath(),
MutateInSpec.upsert("age", 24)
// .. other parts of update XyRZHDJJD6738 here
));
}
catch (PathExistsException err) {
// Update XyRZHDJJD6738 has already been applied
// No changes have been made to the document
}