Несколько обновлений Rethinkdb с условной проверкой

У меня есть небольшой вопрос о запросе rethinkdb в python.

У меня есть вложенный документ:

{'id': XX, 'markets_tracking': {'market_name_1': { 'latest_update': (timestamp), 'market_data': { 'type_1': {'place1': XX, 'place2': XX}, {'type_2': {'place1':XX, 'place2': XX}}}}}}

Этот документ обновляется очень часто (от 500 мс до 2-3 с) одним или несколькими работниками. Это значения места, которые обновляются для определенного типа. Чтобы быть уверенным, что вставлено самое последнее значение, я хочу выполнить проверку поля «lastest_update» (чтобы убедиться, что мое новое извлеченное значение является более новым, чем значение в rethinkdb), прежде чем обновлять его значение места и в в то же время, если я обновлю его, я хочу обновить значение lastest_update...

В настоящее время мне удалось создать условное обновление следующим образом:

r.table('markets_us').get('xxx').update(lambda market:    r.branch(market['market_tracking']['market_name_1']['latest_update'] < time.time(), {'market_tracking':{'type_1':{'place1':XX}}}, {})).run()

И теперь мне просто нужно добавить обновление поля «последнее обновление» одновременно, если это возможно.

Спасибо,


person Matt    schedule 05.05.2016    source источник


Ответы (1)


Достаточно просто добавить latest-update к объекту. Я также думаю, что нашел ошибку, поскольку вы забыли включить ключи market_data и market_name_1.

r.table('markets_us').get('xxx').update(
   lambda market: r.branch(market['market_tracking']['market_name_1']['latest_update'] < time.time(), 
   {
    'market_tracking':{
       'market_name_1': {
         'market_data': {'type_1':{'place1':XX}},
         'latest_update': time.time(),
       }
     },
   }, 
   {})).run()

Дайте мне знать, если это сработает для вас!

person dalanmiller    schedule 12.05.2016