В чем функциональное отличие от использования разрешения конфликтов «заменить» и «обновить» в RethinkDB

Операция Rethinkdb insert имеет несколько режимов разрешения конфликтов при попытке вставить документ. который (на основе первичного ключа) уже существует. то есть:

Возможные значения: «ошибка», «заменить» или «обновить». «ошибка»: не вставлять новый документ и записывать конфликт как ошибку. Это значение по умолчанию. «заменить»: полностью заменить старый документ новым. «обновить»: обновить поля старого документа с помощью полей из нового.

Хотя я понимаю техническую разницу между «заменой» и «обновлением», мне любопытно функциональное различие (если оно есть) между ними.

Например, я подумал, что, возможно, одно из двух не привело к событию в ленте изменений, когда вставленный документ точно такой же, как уже существующий документ, но, похоже, это не так.

Итак, в чем функциональная разница между двумя вариантами?


person Geert-Jan    schedule 17.03.2015    source источник


Ответы (1)


replace заменит весь документ (и может удалить поля), update просто обновит поля и никогда не удалит поля.

Если ваш документ {id: 1, foo: "hello", bar: "world"}

r.table('data').get(1).update({foo: "bonjour"})
// -> {id: 1, foo: "bonjour", bar: "world"}

r.table('data').get(1).replace({id: 1, foo: "bonjour"})
// -> {id: 1, foo: "bonjour"}
person neumino    schedule 17.03.2015