本质上,我正在尝试获取单个记录插入的生成键。就像是:
rethinkdb.table('test').insert(request.data).pluck('generated_keys')[0].run(connection)
并让它返回类似:
{
"id": "61fa30de-cfb1-4133-ae86-cf6e4f1a011e"
}
最佳答案
我只想提供一些提示,以便您以后可以解决。首先,您可以使用typeOf
查找数据类型。
r.table('dummy').insert({f: "foo"}).typeOf()
"OBJECT"
因此,您知道是否返回对象。接下来,您转到RethinkDB文档,尝试查找一些类似的功能。一个很好的猜测是
get_field
http://rethinkdb.com/api/javascript/get_field/可以在对象上调用get_field:
sequence.getField(attr)→序列
singleSelection.getField(attr)→值
object.getField(attr)→值
让我们看看它返回什么:
r.table('dummy').insert({f: "foo"}).getField('generated_keys').typeOf()
"ARRAY"
让我们找到一个命令以返回数组中的元素。您可以再次浏览文档,并会注意到
nth
命令从数组中返回第n个元素。因此,我们现在可以这样做:r.table('dummy').insert({f: "foo"}).getField('generated_keys').nth(0)
"c2b1bf69-a926-4c27-b1a6-011d47c700df"
让我们尝试简化它。使用
getField
可以使人满意。简而言之,您可以使用方括号()
从对象获取单个字段r.table('dummy').insert({f: "foo"})('generated_keys').nth(0)
"77f4aca6-9219-494e-9998-23eb9abcd5e0"
但是使用
nth
也可以使字段恼。我们可以简短吗?幸运的是,也可以在数组上调用方括号。http://rethinkdb.com/api/javascript/bracket/()命令还接受整数参数作为数组偏移量,例如
第n个命令。
结合我们拥有的一切:
r.table('dummy').insert({f: "foo"})('generated_keys')(0)
所有这些都直接在Data Explorer上运行,但是我认为您可以通过查看JavaScript轻松地将它们转换为Python并转换为Python。