我有以下加入:
r.db("public").table("police_internal_affairs_allegations").eq_join("organization_id", r.db("public").table("organizations")).run()
示例行是:
{u'right': {u'id': u'2a5e2e3d-275a-426e-9ecd-0bd5601bff6b', u'name': u"King County Sheriff's Office"}, u'left': {u'': u'3896', u'IIU #': u'IIU2012-158', u'Occurred date': u'14-Sep-12', u'Directive': u'03.00.020-PERFORMANCE STANDARDS', u'Action taken': u'', u'Date hired': u'2-Aug-93', u'Employee Type (snap)': u'Employee Sworn', u'id': u'0002ec82-450b-4686-b7c9-9b15d18e7ed8', u'ID number': u'3896', u'Finding date': u'6-Dec-12', u'organization_id': u'2a5e2e3d-275a-426e-9ecd-0bd5601bff6b', u'First name': u'Mark', u'Incident type': u'Inquiry', u'Finding': u'Exonerated', u'CAD/Incident No': u'12-217028', u'Last name': u'Sigurdson'}}
我希望右侧的键以organization_开头,然后我会做一个zip()
我能用Python做到这一点(见下文),但想在RethinkDB中做到这一点。
modified_joined_data = []
for data in joined_data:
d = {}
d.update(data['left'])
new_right_side = data['right'].items()
new_right_side = dict([('organization_'+item[0], item[1]) for item in new_right_side])
d.update(new_right_side)
modified_joined_data.append(d)
我找到了一半解决方案:
joined_data = list(r.db("public").table("police_internal_affairs_allegations").eq_join("organization_id", r.db("public").table("organizations")).map({"right":{
"organization_id": r.row["right"]["id"],
"organization_name": r.row["right"]["name"]
}, "left": r.row["left"]}).zip().run())
我希望这个版本不要求我拼出右手边。
答案 0 :(得分:1)
我认为这有效:
EQ_JOIN.merge(
lambda row: {'right': row['right'].coerce_to('array').map(
lambda pair: [r.expr('organization_') + pair[0], pair[1]]
).coerce_to('object')}
)