Как получить данные из таблицы Rethinkdb на основе имени поля вместо значения поля

У меня есть таблица rethinkdb с 5 строками, одна из которых следующая:

{
"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()

Но приведенный выше запрос возвращает только 1 строку в каждом случае, независимо от того, предназначен ли токен для 4 строки или 2 строки.

Что я делаю не так!


person Dinesh Nagar    schedule 20.01.2016    source источник


Ответы (2)


Я хочу расширить ответ Anders Bornholm на hasFields, потому что hasFields очень мощный. При применении к последовательности она может действовать как фильтр.

Ваш запрос может быть простым:

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

Используя синтаксис вложенных полей, мы можем легко написать мощный запрос, когда он содержит много глубокий уровень полей.

person kureikain    schedule 20.01.2016

Вы можете использовать hasFields прямо в фильтре:

r.db('admin').table('services')
   .filter(function (service) 
       { return service('appkey').hasFields('YcJ1HR6vjebXNHwOzeC2l2EAvUNw8qyp') })
person Anders Bornholm    schedule 20.01.2016