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

时间:2016-01-20 06:40:09

标签: javascript node.js rethinkdb rethinkdb-javascript

我有一个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行,无论令牌是4行还是2行。

我做错了什么!

2 个答案:

答案 0 :(得分:4)

我想在Anders Bornholm上展开hasFields的答案,因为hasFields非常强大。当应用序列时,它可以像过滤器一样。

您的查询可以很简单:

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

使用nested field syntax,当它包含许多深层次的字段时,我们可以非常轻松地编写强大的查询。

答案 1 :(得分:1)

您可以直接在过滤器中使用hasField:

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