如何通过一个表的pid将两个表连接到其他表的嵌入数组字段值?

时间:2015-08-06 08:06:27

标签: rethinkdb reql

(对不起,问题标题很尴尬) 您好,我有两个包含这样数据的表:

//friend_group table
{
    .....
    {
       "id":"user-me"//owner id 
       "FriendGroups":[
             {"id":"friendGroup_1","Members":["friend_1","friend_2"]},
             {"id":"friendGroup_2","Members":["friend_1","friend_3","friend_4"]},
        ]
    }
    .....
}

//friend table
{
    .....
    {"id":"friend_1","Skills":["java","c++"]}
    {"id":"friend_2","Skills":["python","ruby"]}
    {"id":"friend_3","Skills":["golang","c++"]}
    {"id":"friend_4","Skills":["javascript","ruby"]}
    ....
}

我想查询“user-me”的朋友,他们已被分配到“friendGroup-2”组并拥有技能“c ++”,因为给定的数据结果应为:

["friend_1","friend_3"]

我尝试过这样:

r.db("test").table("friend").filter(function(u){
    return r.table("friendGroup").get("user-me")("FriendGroups").filter(function(fg){
      return fg("id").eq("friendGroup_2").and(fg("Members").contains(u("id")))
})}).pluck("id")

我的剧本有什么问题?

更新我的脚本是:

r.db("test").table("friend").filter(function(u){
    return r.table("friendGroup").get("user-me")("FriendGroups").filter(function(fg){
      return fg("id").eq("friendGroup_2").and(fg("Members").contains(u("id")))
})}).filter(function(u){return u("Skills").contains("skill-2")}).pluck("id").pluck("id")

1 个答案:

答案 0 :(得分:0)

事实证明,将返回的“过滤器”更改为“包含”将解决此问题,正确的脚本应该是:

r.db("test").table("friend").filter(function(u){
return r.table("friendGroup").get("user-me")("FriendGroups").**contains**(function(fg){
  return fg("id").eq("friendGroup_2").and(fg("Members").contains(u("id")))
})}).filter(function(u){return u("Skills").contains("skill-2")}).pluck("id").pluck("id")