我有以下表格
实体
i
entity_authors
|id|title|
entity_to_authors
|id|authorName|
我设法加入了表|id|entityId|authorId|
和entity
entity_to_authors
现在我需要从表r.table("entity")
.get("f17234b6-b25c-4037-8dd1-314841967964")
.merge({e -> r.hashMap("entity_to_authors", r.table("entity_to_authors").filter(r.hashMap("entityId", e.g("id"))).coerceTo("array"))})
.run<Unit>(connection)
获取数据
我是这样做的(但这是错的)
entity_authors
因为我在这里使用r.table("entity")
.get("f17234b6-b25c-4037-8dd1-314841967964")
.merge({e -> r.hashMap("entity_to_authors", r.table("entity_to_authors").filter(r.hashMap("entityId", e.g("id"))).coerceTo("array"))})
.merge({e -> r.hashMap("entity_authors", r.table("entity_authors").filter(r.hashMap("id", e.g("entity_to_authors").nth(0).g("authorId"))).coerceTo("array"))})
.run<Unit>(connection)
来获取从nth(0)
收到的第一行数据
我该怎么办才能得到所有作者?
抱歉我的英文!
答案 0 :(得分:0)
有人告诉我这样做了:
.merge{ row -> r.hashMap("entity_authors", r.table("entity_authors")
.filter { ea -> row.g("entity_to_authors").g("authorId").contains(ea.g("id")) }
.coerceTo("array"))}
答案 1 :(得分:0)
这是写查询的一种方法:-
r.table("entity")
.merge(function(entity) {
return {
authorIds: r.table("entity_to_authors").filter({ entityId: entity("id")})("authorId").coerceTo("array")
}
})
.merge(function(entity) {
return {
authors: r.table("entity_authors").getAll(r.args(entity("authorIds"))).coerceTo("array")
}
})
.without("authorIds")
步骤1:从第一次合并中获取映射的authorIds
数组。
第2步:从第二次合并中的authorIds中获取作者。 getAll
通常采用逗号分隔的值,要传递数组,您需要使用r.args
。
第3步:最后,从结果中删除authorIds
属性,我们不想在结果中映射,我们想映射作者。
希望有帮助。