出现特定数据集的错误

我当前正在为 Luvit 编写驱动程序,这是一种与当前 Lua-ReQL 驱动程序不兼容的 Lua 库。我应该如何解决这个问题?

有关数据,请参见以下 JSON:

{"Settings":{"bet":"b!","admin_roles":[],"co_owner_roles":[],"voting_chan":"default---channel","mod_log":"true","log_channel":"default---channel","voting":"false","verify":"true","audit_log":"true","audit_log_chan":"audit-log-test","mod_log_chan":"modlog","banned_phrases":[],"mod_roles":[],"verify_chan":"default---channel","mod_log_channel":"default---channel","verify_role":"Member"},"Roles":[],"Cases":[],"Votes":[],"Timers":[],"id":"284381751084843008","Ignore":[]}

序列化数据为:

[1,[53, [[15, [[14, ["test"]], "table"]], {"Ignore":[],"id":"284381751084843008","Cases":[],"Roles":[],"Timers":[],"Settings":{"bet":"b!","admin_roles":[],"co_owner_roles":[],"voting_chan":"default---channel","mod_log":"true","log_channel":"default---channel","voting":"false","verify":"true","audit_log":"true","audit_log_chan":"audit-log-test","mod_log_chan":"modlog","banned_phrases":[],"mod_roles":[],"verify_chan":"default---channel","mod_log_channel":"default---channel","verify_role":"Member"},"Votes":[]}]],{}]

从服务器返回的数据为:

预期在原始查询中出现 1 到 3 个元素,但未发现任何元素。
点赞
用户7551505
用户7551505

问题的关键是数组中有一个是空的。你正在从哪个实际查询构建这个问题呢?是 r.db('test').table('table').update(<your document>) 吗?

我正在查看源文件 term_walker.cc。它看起来像是传递给 UPDATE 的对象(整个对象 {"Ignore"...})将被包装成 [MAKE_OBJ, {"Ignore"...}](随着 AST 的处理,使用代码行 rewrite(src, Term::MAKE_OBJ);),然后对象 {"Ignore"...} 将以与 optargs 参数相同的方式进行处理--它们的值字段会调用 walk

看起来,裸对象与已经用 [3, <object>] 进行了封装的对象被视为相同的(因为 MAKE_OBJ = 3)。当用户编写表达式 {"abc": r.add(1, 2)} 时,这应该是一个 MAKE_OBJ 表达式,并且子表达式需要被客户端库转换为适当的 ReQL-ese。我猜想你的客户端库没有遍历对象并进行这种转换。你需要这样做,以便裸数组会被转换为它们需要被转换为的任何东西(一个 MAKE_ARRAY 术语?)。如果您希望您的客户端传递一个不进行遍历和处理的对象,您应该使用 DATUM

请将我在这里说的一切视为只有 90% 的准确性的指南。

2017-10-19 21:24:31