如何根据字段名称而不是字段值从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 Bornholm
在hasFields
上的答案,因为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') })