本质上,我正在尝试为单个记录插入获取生成的密钥。就像是:
rethinkdb.table('test').insert(request.data).pluck('generated_keys')[0].run(connection)
并让它返回如下内容:
{
"id": "61fa30de-cfb1-4133-ae86-cf6e4f1a011e"
}
在 Python 中,如果要返回插入文档的所有主键的数组,可以执行以下操作:
r.table('test').insert({ "hello": 'world' })['generated_keys'].run(conn)
如果您希望查询以字符串形式返回第一个插入文档的主键,您可以执行以下操作:
r.table('test').insert({ "hello": 'world' })['generated_keys'][0].run(conn)
我只是想提供一些提示,以便您以后可以解决这个问题。首先,您可以使用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
是annyoing。简而言之,您可以使用括号()
从对象中获取单个字段
r.table('dummy').insert({f: "foo"})('generated_keys').nth(0)
"77f4aca6-9219-494e-9998-23eb9abcd5e0"
但是nth
也使用了一些字段annyoying。我们能不能把它缩短。幸运的是,括号也可以在数组上调用。http://rethinkdb.com/api/javascript/bracket/
() 命令也接受整数参数作为数组偏移量,就像第 n 个命令一样。
结合我们拥有的一切:
r.table('dummy').insert({f: "foo"})('generated_keys')(0)
这一切都直接在 Data Explorer 上运行,但我认为您可以通过查看 JavaScript 轻松地将它们转换为 Python 并转换为 Python。