1

本质上,我正在尝试为单个记录插入获取生成的密钥。就像是:

rethinkdb.table('test').insert(request.data).pluck('generated_keys')[0].run(connection)

并让它返回如下内容:

{
    "id": "61fa30de-cfb1-4133-ae86-cf6e4f1a011e"
}
4

2 回答 2

2

在 Python 中,如果要返回插入文档的所有主键的数组,可以执行以下操作:

 r.table('test').insert({ "hello": 'world' })['generated_keys'].run(conn)

如果您希望查询以字符串形式返回第一个插入文档的主键,您可以执行以下操作:

r.table('test').insert({ "hello": 'world' })['generated_keys'][0].run(conn)
于 2015-08-18T15:34:20.913 回答
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) → 序列

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。

于 2015-08-21T17:19:02.087 回答