如何在数组上使用ReQL过滤器和匹配命令

时间:2017-08-18 08:05:01

标签: rethinkdb reql

我在rethinkdb中有一个表,其中每一行都有以下结构 -

{
  'name':'clustername',
  'services':[
     {
        'name':'service1'
     },
     {
        'name':'service2'
     }
  ]
}

我正在运行一个查询来过滤像这样的

的service2对象
r.table('clusters').filter({"name":  "clustername"})
  .pluck('services').filter((service) => { 
     return service("name").match('service2')
  })

但这不会返回任何内容:No results were returned for this query

有人能说出为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

pluck返回序列,因此此查询:

r.table('clusters').filter({"name":  "clustername"}).pluck('services')

将返回:

{

    "services": [
        {
            "name": "service1"
        } ,
        {
            "name": "service2"
        }
    ]

}

您需要从中获取services字段,它会返回包含services找到的filter项字段的数组。

之后,您需要使用map在每个项目上使用第二个过滤器。

所以,正确的查询:

r.table('clusters').filter({"name": "clustername"}).pluck('services')("services").map(item => {
    return item.filter(service => { 
      return service("name").match("service2");
    });

})