RethinkDB:​​迭代对象属性

La *_*ulx 8 rethinkdb

我有以下数据结构:

{
    slug: "wall-slug",
    nodes: {
        "node1": "id-from-nodes-table-1",
        "node2": "id-from-nodes-table-2"
    }
}
Run Code Online (Sandbox Code Playgroud)

节点

{
    id: "id-from-nodes-table-1",
    something: "something"
}
Run Code Online (Sandbox Code Playgroud)

尝试以这种方式将来自节点表的文档合并到wall表中的节点对象中的明确节点:

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);
    })});
})
Run Code Online (Sandbox Code Playgroud)

它应该看起来像这样:

{
    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}
    }
}
Run Code Online (Sandbox Code Playgroud)

但我得到"无法将OBJECT转换为SEQUENCE"消息 - 找不到迭代节点对象属性的方法,并用另一个表中的对象替换它的属性值 - 是否有?

neu*_*ino 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")
  })
})
Run Code Online (Sandbox Code Playgroud)