我怎么做多个eq_joins?

时间:2015-11-30 01:49:29

标签: python rethinkdb

我试图做多个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

结尾的所有字段

1 个答案:

答案 0 :(得分:1)

如果不查看表格中的数据,很难说,但问题是您尝试eq_join的其中一个字段中有一个对象字段而不是ID。我会在eq_join之前运行查询的一部分,并确保它具有您期望的格式。