尝试使用另一个表中的字段在文档中添加新字段。我首先尝试使用r.row
r.db('client').table('basic_info').filter({name:'Andre Pastr'}).update({teacher_name: r.db('teacher').table('basic_info').contains(r.row('name').eq('Nicholas Derma')).pluck('id')});
并返回消息:
e: Cannot use r.row in nested queries. Use functions instead in:
r.db("client").table("basic_info").filter({name: 'Andre Pastr'}).update({"teacher_name": r.db("teacher").table("basic_info").contains(r.row("name").eq("Nicholas Derma")).pluck("id")})
^^^^^
然后在github问题日志中找到[模糊条目] [1]后,我决定只更改查询的语法并运行:
r.db('client').table('basic_info').filter({name:'Andre Albuquerque'}).update({teacher_name: r.db('teacher').table('basic_info').filter({name: 'Nicholas Chadwick'}).pluck('id')});
返回错误消息:
: Could not prove argument deterministic. Maybe you want to use the non_atomic flag?
三个相互关联的问题:我如何使用contains来运行这样的查询?我在第二次查询时做错了什么?为什么r.row在第一个查询中不起作用?
答案 0 :(得分:1)
您无法在第一个查询中使用r.row
,因为它是否应绑定到contains
或update
是不明确的。 (我们可以定义它绑定哪一个,但它对人们来说非常混乱,因为大多数人都没有记住可能绑定r.row
的所有术语,所以强迫人们在模糊的情况下命名他们的变量更容易。 )
您必须指定non_atomic
标志,因为您传递给更新的函数不能以原子方式应用(因为它不是确定性的)。你编写它的方式是,它将为原始过滤器中的每一行执行一次表获取。
你可能想写这样的东西:
r.table('basic_info').filter({name: 'Nicholas Derma'}).pluck('id').do(function(nderma) {
return r.table('basic_info').filter({name: 'Andre Pastr'}).update({teacher_name: nderma);
})
如果您经常运行此查询,则应考虑在name
上创建二级索引并使用getAll
而不是filter
。