2017-08-18 55 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"); 
    }); 

})