2016-03-13 1 views
1

Я ищу обновление сохраненных значений в RethinkDB, используя библиотеку C# RethinkDB.Driver, и я просто не понимаю ее.Значение обновления Rethinkdb .net

Я могу получить обновление, получив результат, изменив этот объект, а затем сделав отдельный вызов для обновления с этим объектом. Когда есть много вызовов для записи, чтобы обновить это значение, значение обновляется в другом месте, пока приложение работает с записью.

TestingObject record = r.Db("test").Table("learning").Get("c8c54346-e35f-4025-8641-7117f12ebc5b").Run(_conn); 

record.fieldNameIntValue = record.fieldNameIntValue + 1; 

var result = r.Db("test").Table("learning").Get("c8c54346-e35f-4025-8641-7117f12ebc5b").Update(record).Run(_conn); 

Я пытался что-то вдоль этих линий:

var result = r.Db("test").Table("learning").Get("c8c54346-e35f-4025-8641-7117f12ebc5b").Update(row => row["fieldNameIntValue"].Add(1)).Run(_conn); 

но ошибки результата с Inserted value must be an OBJECT (got NUMBER):101, который предполагает, что это только передавая значение поля назад вместо обновления объекта.

В идеале я хотел бы обновить несколько столбцов одновременно, любые советы ценится :)

ответ

2

T Resudek Благодаря your answer и понятнее голова помогла подчеркнули необходимость карты Расчетной в собственность.

Глядя на javadocs для обновления имеет HashMap метод, который я следовал с c# library, и она работает.

var result = r.Db("test").Table("learning").Get("c8c54346-e35f-4025-8641-7117f12ebc5b").Update(row => r.HashMap("fieldNameIntValue",row["fieldNameIntValue"].Add(1))).Run(_conn); 

Мне было бы интересно узнать, является ли это правильным путем или был лучшим способом.

+1

Выглядит хорошо. Это должно сработать. Я думаю, вы также можете использовать анонимный тип вместо hashmap (дополнительная функция драйвера C#). Кроме того, я буду следовать предложению @T Resudek. Если у вас возникли проблемы, попробуйте заставить запрос работать в * Data Explorer *, и его следует легко перевести на драйвер C#. :) Надеюсь, это поможет! –

3

Это пример, который работает в проводнике данных ReQL. Вы можете подключаться так же, как фильтры до обновления, как хотите. Я предполагаю, что это переведёт на C# Driver, но у меня нет опыта с этим.

r.db('database').table('tablename').update({clicks: r.row("clicks").add(1)}).run().then(function(result){ ...