Суммируйте два поля во вложенном массиве в RethinkDB

Следующий документ существует в таблице в RethinkDB:

{  
   u'destination_addresses':[  
      u'1 Rockefeller Plaza,
      New York,
      NY 10020,
      USA',
      u'Meadowlands,
      PA 15301,
      USA'
   ],
   u'origin_addresses':[  
      u'1600 Pennsylvania Ave SE,
      Washington,
      DC 20003,
      USA'
   ],
   u'rows':[  
      {  
         u'elements':[  
            {  
               u'distance':{  
                  u'text':u'288 mi',
                  u'value':464087
               },
               u'duration':{  
                  u'text':u'5 hours 2 mins',
                  u'value':18142
               },
               u'status':u'OK'
            },
            {  
               u'distance':{  
                  u'text':u'266 mi',
                  u'value':428756
               },
               u'duration':{  
                  u'text':u'4 hours 6 mins',
                  u'value':14753
               },
               u'status':u'OK'
            }
         ]
      }
   ],
   u'status':u'OK'
}

Я пытаюсь суммировать поле «значение» как для продолжительности, так и для расстояния (таким образом, получая общее расстояние и продолжительность для данной поездки, что является одним из этих документов из Google Maps Distance API). Я пробовал очень много комбинаций pluck (из документации по вложенным полям), но, похоже, не могу заставить это работать. Я работаю на Python, и заранее спасибо за любую помощь.


person nacc    schedule 24.08.2016    source источник


Ответы (1)


Это делает то, что вы хотите?

document['rows'].concat_map(lambda row: row['elements'])['distance']['value'].sum()
person mlucy    schedule 26.08.2016
comment
Это должно быть для ReQL? Если это так, я не могу заставить его работать и не могу найти аналогичный фрагмент в документации. И я достаточно новичок в Python, чтобы не знать навскидку, нужно ли его туда бросать? - person nacc; 26.08.2016
comment
Это код ReQL. Если вы замените document любым запросом ReQL, который получает ваш документ, то приведенный выше запрос предназначен для суммирования расстояний. - person mlucy; 26.08.2016
comment
Попался, работал как шарм. Мне пришлось добавить пару вещей, чтобы заставить его работать в интерпретаторе Python, поэтому для всех, кто смотрит на это, я получил: r.table('stories').get('689bc43c-c8c3-45df-b38b-e52043a0bab4')['rows'].concat_map(lambda row: row['elements'])['distance']['value'].sum().run() спасибо @mlucy! - person nacc; 29.08.2016