2014-02-18 2 views
8

I имеют следующую структуру данных:RethinkDB: Итерация по свойствам объекта

стены

{ 
    slug: "wall-slug", 
    nodes: { 
     "node1": "id-from-nodes-table-1", 
     "node2": "id-from-nodes-table-2" 
    } 
} 

узлы

{ 
    id: "id-from-nodes-table-1", 
    something: "something" 
} 

Попытка объединить документ из таблицы узлов в определенном узле в узлы объекта в настенный стол таким образом:

r.db("test").table("walls").getAll("wall-slug", {index: "slug"}).map(function(row) { 
    return row.merge({nodes: row("nodes").map(function(node) { 
     return r.db("test").table("nodes").get(node); 
    })}); 
}) 

И это должно выглядеть следующим образом:

{ 
    slug: "wall-slug", 
    nodes: { 
     "node1": {object from nodes table got by value from this property}, 
     "node2": {object from nodes table got by value from this property} 
    } 
} 

Но я получаю «Не удается преобразовать OBJECT в ПОСЛЕДОВАТЕЛЬНОСТИ» сообщение - не может найти способ перебора узлов свойства объекта и заменить его значений свойств объектов от другого стол - есть ли какие-нибудь?

ответ

10

map Итерации по массиву или потоку, а не объект. Вы можете использовать keys(), чтобы получить ключи, а затем итерации по ним.

Вот что запрос выглядит следующим образом:

r.db("test").table("walls").getAll("wall-slug", {index: "slug"}).map(function(row) { 
    return row.merge({nodes: 
    row("nodes").keys().map(function(key) { 
     return r.expr([key, r.db("test").table("nodes").get(row("nodes")(key))]) 
    }).coerceTo("object") 
    }) 
}) 
+0

это один раз не работает - не может принуждать STRING Возражать –

+0

К сожалению, я забыл некоторые квадратные скобки. Я только что редактировал запрос, не могли бы вы попробовать еще раз? – neumino

+0

работает должным образом! –

Смежные вопросы