基本上,我试图获取单个记录插入的生成密钥。类似的东西:
rethinkdb.table('test').insert(request.data).pluck('generated_keys')[0].run(connection)
让它返回类似:
{
"id": "61fa30de-cfb1-4133-ae86-cf6e4f1a011e"
}
答案 0 :(得分:2)
在Python中,如果要为插入的文档返回所有主键的数组,可以执行以下操作:
r.table('test').insert({ "hello": 'world' })['generated_keys'].run(conn)
如果希望查询将第一个插入文档的主键作为字符串返回,则可以执行以下操作:
r.table('test').insert({ "hello": 'world' })['generated_keys'][0].run(conn)
答案 1 :(得分:2)
我只想提供一些提示,以便您以后可以解决这个问题。首先,您可以使用typeOf
来查找数据类型。
r.table('dummy').insert({f: "foo"}).typeOf()
"OBJECT"
所以你知道是否返回一个对象。接下来,您转到RethinkDB文档,尝试查找一些类似的功能。一个好的猜测是get_field
http://rethinkdb.com/api/javascript/get_field/
可以在对象上调用get_field:
sequence.getField(attr)→sequence
singleSelection.getField(attr)→value
object.getField(attr)→value
让我们看看它的回报:
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。