RethinkDB 分支/做 + "Argument 1 to deleteAt may not be `undefined`."

RethinkDB branch / do + "Argument 1 to deleteAt may not be `undefined`."

我正在尝试编写一些有点复杂的 ReQL,它从字段中的数组中删除单个值,或者如果该值是数组中的唯一值,则完全删除记录。

我以为我已经使用 branch/do/offsetAt 解决了这个问题,但后来我 运行 进入这个“deleteAt 的参数 1 可能不是 undefined。”错误,我不知道修复是什么。

r.branch(
    r.db('db').table('table').get('uuid').eq(null),
    {"deleted": 0, "errors": 0, "inserted": 0, "replaced": 0, "skipped": 0, "unchanged": 1},
    r.db('db').table('table').get('uuid').getField('array_field').eq(['value']),
    r.db('db').table('table').get('uuid').delete(),
    r.do(
        r.db('db').table('table').get('uuid').getField('array_field').offsetsOf('value'),
        function(index) {
            return r.branch(
                index.eq([]),
                {"deleted": 0, "errors": 0, "inserted": 0, "replaced": 0, "skipped": 0, "unchanged": 1},
                r.db('db').table('table').get('uuid').update({
                    "array_field": r.row('array_field').deleteAt(index[0])
                })
            )
        }
    )
)

此外,作为附带问题,是否有更有效的方法来执行此操作而无需不断地反复调用 .get()

原来这里的问题在于我认为我可以在索引上使用 []。

在第 16 行切换到 .deleteAt(index.nth(0)) 解决了问题,或者至少将错误更改为“无法在嵌套查询中使用 r.row”

所以我重写了代码以解决我的次要问题,即使用 .get()

不断获取数据

现在我的新密码是

r.do(
    r.db('db').table('table').get('uuid'),
    function(record) {
        return r.branch(
            record.eq(null),
            {"deleted": 0, "errors": 0, "inserted": 0, "replaced": 0, "skipped": 0, "unchanged": 1, "result": "no record"},
            record.getField('array_field').eq(['array_value']),
            r.db('db').table('table').get('uuid').delete(),
            r.do(
                record.getField('array_field').offsetsOf('array_value'),
                function(index) {   
                    return r.branch(
                        index.eq([ ]),
                        {"deleted": 0, "errors": 0, "inserted": 0, "replaced": 0, "skipped": 0, "unchanged": 1, "result": "no index"},
                        r.db('db').table('table').get('uuid').update({
                            "array_field": record.getField('array_field').deleteAt(index.nth(0))
                        })
                    )
                }
            )
        )
    }
)