我试图做多个eq_joins。我得到的错误是:
ReqlQueryLogicError: Primary keys must be either a number, string, bool, pseudotype or array (got type OBJECT):
{
"First name": "John",
"Last name": "Urquhart",
"employers": [
{
"date_hired": "2-Mar-88",
"organization_id": "2a5e2e3d-275a-426e-9ecd-0bd5601bff6b"
}
],
"id": "e70d5350-c1e0-41ee-a1cc-6638c7136d89",
"primary_photo": "http://www.kingcounty.gov/~/media/safety/sheriff/Sheriff_Urquh in:
r.db('public').table(u'police_internal_affairs_allegations').filter(lambda var_24: var_24.coerce_to('string').match(u'(?i).*?Urquhart.*?')).eq_join(u'organization_id', r.db('public').table(u'organizations')).merge(lambda var_25: r.expr({'right': var_25['right'].coerce_to('array').map(lambda var_26: [(r.expr(u'organization_') + var_26[0]), var_26[1]]).coerce_to('object')})).zip().eq_join(u'person_id', r.db('public').table('people')).merge(lambda var_27: r.expr({'right': var_27['right'].coerce_to('array').map(lambda var_28: [(r.expr(u'person_') + var_28[0]), var_28[1]]).coerce_to('object')})).zip()
我的代码是:
ids_for_other_tables = [field for field in fields if field.endswith('_id')]
modified_joined_data = []
for field in ids_for_other_tables:
special_names = {'person': 'people'}
t = special_names[field[:-3]] if field[:-3] in special_names else field[:-3]+'s'
dbobj = getattr(dbobj, 'eq_join')(field, r.db("public").table(t))
dbobj = dbobj.merge( lambda row: {'right': row['right'].coerce_to('array').map(
lambda pair: [r.expr(field[:-2]) + pair[0], pair[1]]
).coerce_to('object')})
dbobj = dbobj.zip()
此代码的目的是从表中自动连接信息,以_id
结尾的所有字段答案 0 :(得分:1)
如果不查看表格中的数据,很难说,但问题是您尝试eq_join
的其中一个字段中有一个对象字段而不是ID。我会在eq_join
之前运行查询的一部分,并确保它具有您期望的格式。