Как узнать максимальную или последнюю дату? Как создать поля для расчета? Как удалить поле? - Переосмыслить БД

Ниже приведены вопросы, которые я задавал по проблемам github.com/rethinkdb, на которые они ответили. Я пишу здесь на благо сообщества rethinkdb

1.Как отфильтровать максимальную дату из приведенных ниже данных:

[   
{"TimeStamp": Fri Oct 11 2013 05:51:12 GMT+00:00},
{"TimeStamp": Thu Oct 10 2013 15:41:09 GMT+00:00},
{"TimeStamp": Thu Oct 10 2013 15:44:04 GMT+00:00}
]

2.Как создать вычисляемые поля? У меня есть такие данные в rethinkdb

[
{id: 1, sales: 1000, discount: 0.1},
{id: 2, sales: 2000, discount: 0.2},
{id: 3, sales:3000, discount: 0.1}
]

Как я могу преобразовать это, как показано ниже:

[{id: 1, sales: 1000, discount: 0.1, discAmt: 100, netSales: 900},
{id: 2, sales: 2000, discount: 0.2, discAmt: 400, netSales: 1600},
{id: 3, sales: 3000, discount: 0.1, discAmt: 300, netSales: 2700}
]

Как удалить поле скидки из приведенного выше?


person ekanna    schedule 12.10.2013    source источник


Ответы (1)


<сильный>1. Максимальная дата

Для максимальной временной метки, если вы просто хотите получить последнюю временную метку, вы можете сделать

r.table("foo").map( r.row("TimeStamp") ).reduce( function(left, right) {
   return r.branch( left.gt(right),
    left,
    right
})

Если вам нужен документ с наибольшей меткой времени, вы можете сделать

r.table("foo").orderBy(r.desc("TimeStamp")).limit(1)

Это отсортирует всю таблицу, поэтому вы можете создать индекс для TimeStamp и использовать

r.table("foo").orderBy({index: "TimeStamp"}).limit(1)

2.Вычисляемые поля

r.db("books").table("sales").update( function(row){ 
  var discAmt = row("sales").mul(row("discount")); 
    return {
    discAmt: discAmt,
    netSales: row("sales").sub(discAmt)
 }
})
.run()

3. Удаление поля

 r.db("books").table("sales").replace( function(row) {
     return row.unpick("discount");
 })
 .run()

Я надеюсь, что это поможет новичкам rethinkdb, таким как я.

Спасибо

person ekanna    schedule 12.10.2013