Допустим, у меня есть документ
{
id: 1,
fruits: []
}
фрукты здесь выступает как НАБОР
Теперь я хочу атомарно добавить значение в массив фруктов для документа с первичным ключом = 1 ИЛИ создать такой документ, если он не существует (т.е. использовать SetInsert ReQL под капотом)
Мне также нужно сделать то же самое для увеличения (ReQL .Add)
Очевидно, что это невозможно сделать в клиентском коде, так как это нарушает атомарность, и я получаю противоречивые данные.
Я хотел бы, чтобы что-то подобное было возможно
r.table('results').insert({
id: '62c70132-6516-4279-9803-8daf407ffa5c',
counter: r.row('counter').add(1).default(0)
}, {conflict: "update"})
но он умирает с «RqlCompileError: r.row не определен в этом контексте в»
Любая помощь / руководство приветствуется, спасибо!
r.row
в основном означает текущую строку для каждой строки, с которой вы будете работать в ReQL-языке. Во вставкеr.row
не имеет смысла, поэтому возникает эта ошибка. Однако, если вы ищете конкретный документ, то нет причин, по которым вы не можете получить поле документа с помощью подзапроса, см. мой ответ ниже по этому поводу :) - person Chris Foster   schedule 26.07.2015