我有3张桌子。 forums
,其中有许多posts
,其中有许多comments
。我想从一个特定的comments
中检索所有forum
。我知道我可以作为单独的查询执行以下操作:
var chosenForumID = "...";
var posts = /* get all posts where post.forumID === chosenForumID */;
var comments = /* get all comments where comment.postID is in 'posts' */;
虽然可以使用一个嵌套查询吗?
答案 0 :(得分:2)
天真的方式
您可以通过执行以下操作在一个查询中实际执行此操作:
r.table('forums')
.get(ID)
.merge({
'comments': r.table('posts').filter({ 'forumID': ID })('id').coerceTo('array')
.do(function (postsIdsArray) {
return r.table('comments').filter(function (row) {
return postsIdsArray.contains(row('id'));
})
}).coerceTo('array')
})('comments')
更好的方式
如果您正在执行此操作并且您在子级上有关系(子级具有指向ID的父级属性),那么您应该为forumID
和{{1}创建辅助索引}。
postID
创建它们之后(您只需要创建一次),然后可以使用// Create Indexes
r.table('posts').indexCreate('forumId')
r.table('comments').indexCreate('postId')
术语使其成为索引操作。
getAll
辅助索引可以加快此操作。