如何根据字段名称而不是字段值从Rethinkdb表中获取数据

我有一个rethinkdb表,它有5行,其中一行如下:

{ "appkey": { "YcJ1HR6vjebXNHwOzeC2l2EAvUNw8qyp": { "createdBy": { "fullName": "DD" , "id": "7943d176-4805-461d-841e-3de766a3825d" , "primaryName": dd@gmail.com, » } , "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() 

但是上面的查询在每种情况下只返回1行,不pipe令牌是4行还是2行。

我做错了什么!

我想扩展Anders BornholmhasFields上的答案,因为hasFields非常强大。 在应用序列时,它可以像filter一样工作。

你查询可以是简单的:

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

使用嵌套字段语法,当它包含许多深层次的字段时,我们可以编写非常简单的强大查询语句。

您可以直接在filter中使用hasFields:

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