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

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。

07-24 09:52