2015-11-23 6 views
1

Что было бы эффективным способом получить последние пары ключей ключ-значение от объекта? Сортируется по имени ключа, а N - произвольное целое число. В идеале возвращаемый тип также должен быть объектом.RethinkDB: получить последний N от объекта

ответ

2

Если вы хотите последний n, я бы написал obj.coerceTo('array').slice(-n).coerceTo('object'). (Объекты в RethinkDB неявно сортируют свои поля по ключу.) Если вы хотите первый n, я бы написал .slice(0, n) вместо .slice(-n).

0

Что-то, как это должно работать

r.object(r.args(

    a_single_object_return_from_a_reql_or_an_r_dot_expr 
    .do(function(doc) { 

    return 
     doc.keys().slice(0, THE_NUMBER_OF_KEY) 
     .concatMap(function(k) { 
      return [k, doc(k)] 
     }) 

    }) 

)) 

Предположим, у меня есть таблица s1 с этим документом, чей идентификатор: 65e1546a-f23f-4fe6-9cd7-4ba580770123:

{ 
"created_at": "2013-10-13 00:58:11" , 
"id": "65e1546a-f23f-4fe6-9cd7-4ba580770123" , 
"id_tweet": "389193311908413440" , 
"id_user": 12375562 , 
"name": "elgabo1" , 
"photo": https://pbs.twimg.com/profile_images/1827710728/45d1be6d2e0f1c710814e098d6f56c12_normal.png, » 
"screen_name": "elgabo1" , 
"status_tweet": 1 , 
"text": "@profeco Deurope Gran Sur tapa los sellos de suspensión con propaganda" 
} 

Применить выше запрос я могу написать что-н, как это, чтобы получить первые 5 ключи, возвращать объект:

r.object(r.args(

    r.table('s1').get('65e1546a-f23f-4fe6-9cd7-4ba580770123') 
    .do(function(doc) { 

    return 
     doc.keys().slice(0, 5) 
     .concatMap(function(k) { 
      return [k, doc(k)] 
     }) 

    }) 

)) 

Результат:

{ 
"created_at": "2013-10-13 00:58:11" , 
"id": "65e1546a-f23f-4fe6-9cd7-4ba580770123" , 
"id_tweet": "389193311908413440" , 
"id_user": 12375562 , 
"name": "elgabo1" 
} 
Смежные вопросы