如何将文档数组作为执行查询的条件?

时间:2014-04-23 08:26:36

标签: rethinkdb

我有两个这样的文件:

//school       
{
     Name:""       
     Major:"",
     EnrollYear:1983
}


//schools
{
  id: "user/0",
  ownerId:""
  //an array that contains schools
  schools: [ 
              {
                 Name:""       
                 Major:"",
                 EnrollYear:1983
               }
               .....
           ]
}

如何将一系列学校作为查询ownerIds的条件?

例如:如果我想得到那些在B学校上过学校但在D年就读于C学校的学生的所有者...(或更多),那么我的查询条件可能是这样的:< / p>

condition: [
              {
                  Name:"A"       
                  ....
                  EnrollYear:B
               },
               {
                  Name:"C"       
                 ...
                  EnrollYear:D
               }
           ]

2 个答案:

答案 0 :(得分:1)

rethinkdb邮件列表中的人给出了正确答案:

r.table('schools').filter(function(row){
  return row('schools').pluck('name', 'enrollyear').contains(function(school){
    return CONDITION.pluck('name', 'enrollyear').contains(school);
 })
})

答案 1 :(得分:0)

您可以像这样构建一个查询

r.table("users").filter(function(user) {
    return user("schools").contains(function(school) { 
        return school("Name").eq(A).and("school("EnrollYear").eq(B)
    }).and(
        user("schools").contains(function(school) { 
            return school("Name").eq(C).and("school("EnrollYear").eq(D)
        })
    )
})

另外,在您的情况下,您与用户和学校之间存在“多对多”关系。在这种情况下,更好的方法是创建第三个表“链接”,以保存用户和学校之间的关系。它会让事情变得更容易查询。