2017-08-18 26 views
1

我有一个表中rethinkdb ReQL滤波器和匹配命令,其中每行有下列结构 -如何使用数组上

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

我运行一个查询过滤这样

r.table('clusters').filter({"name": "clustername"}) 
    .pluck('services').filter((service) => { 
    return service("name").match('service2') 
    }) 
服务2物体

但是这并没有返回任何东西:No results were returned for this query

有谁能告诉为什么会发生这种情况吗?

回答

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"); 
    }); 

})