2016-01-20 36 views
1

我有一個有5行的rethinkdb表中獲取數據,該行之一是 如下:如何從Rethinkdb表基於字段名稱,而不是字段值

{ 
"appkey": { 
"YcJ1HR6vjebXNHwOzeC2l2EAvUNw8qyp": { 
"createdBy": { 
"fullName": "DD" , 
"id": "7943d176-4805-461d-841e-3de766a3825d" , 
"primaryName": [email protected], » 
} , 
"creationTime": "2016-01-20T05:57:40.773+00:00" , 
"expiryTime": "2017-01-20T05:57:40.539+00:00" 
} 
} , 
"creationTime": "2016-01-20T05:57:40.773+00:00" , 
"customerId": "U2KRpPbK" , 
"domain": "co.in" , 
"id": "40e536cc-08f1-4a54-8104-13d900abd643" , 
"kind": "admin#option1#option2" , 
"roles": { 
"admin#option1#option2": { 
"create": true , 
"delete": true , 
"modify": true , 
"read": true 
} 
} 
} 
} 

在這種情況下,我怎麼能取上面的行基於appKey的字段「YcJ1HR6vjebXNHwOzeC2l2EAvUNw8qyp」,這是我正在獲取表單客戶端的令牌。

爲了做同樣的我試着用下面的查詢:

r.db('admin').table('services') 
     .filter(function (record) { 
       return record('appkey').coerceTo('array') 
       .map(function (record) { 
        return record(1).hasFields(token) 
       }); 
       .distinct() 

     }) 

     .run() 

但上面的查詢在任何情況下符號是否是4行或2行只返回1行。

我做錯了什麼!

回答

1

您可以在過濾器中直接使用hasFields:

r.db('admin').table('services') 
    .filter(function (service) 
     { return service('appkey').hasFields('YcJ1HR6vjebXNHwOzeC2l2EAvUNw8qyp') }) 
4

我想擴大hasFieldsAnders Bornholm的答案,因爲hasFields是非常強大的。在應用序列時,它可以像過濾器一樣工作。使用nested field syntax當它含有領域的許多深層次下來,我們可以寫很容易強大的查詢

r.db('admin').table('services') 
    .hasFields({'appkey': {'YcJ1HR6vjebXNHwOzeC2l2EAvUNw8qyp': true}}) 

您查詢可以作爲只是簡單的。

相關問題