RethinkDB: получить последний N от объекта

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

2 ответа

Решение

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

Как то так должно работать

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"
}
Другие вопросы по тегам