2014-02-18 109 views
8

我有以下的數據結構: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} 
    } 
} 

,但我得到「無法對象轉換爲SEQUENCE」消息 - 無法找到一個方法來遍歷節點對象的屬性和替換它的屬性值與另一個對象桌子 - 有沒有?

回答

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

按預期工作! –