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))
})
)
}
)
)
}
)
我正在尝试编写一些有点复杂的 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))
})
)
}
)
)
}
)