嵌入式数组中的 ReQL 更新对象在侦听更改时发出 "create" 和 "delete" 事件

ReQL Updating object inside an embedded array emits "create" and "delete" events when listening to changes

我遇到了以下问题:假设我有以下结构:

{
    "id": 1,
    "data": {
       "arr": [{"text":"item1"}]
    }
}

以及以下查询:

r.db('test').table('test').get(1).update(function (item) {
    return {
        data: {
          arr: item('data')('arr').map(function (row) {
             return r.branch(
                  row('text').eq('item1'),
                  row.merge({updated:true}),
                  row
             )
          })
        }
    }
})

我仅侦听此特定数组中的更改,当项目更新时,创建和删除事件都会发出。我真的需要接收更新事件,例如old_val 不为空且 new_val 不为空。

提前谢谢大家

你可以使用这样的东西

r.db('test').table('test')('data')('arr').changes()
  .filter(function(doc) {
    return doc('new_val').ne(null).and(doc('old_val').ne(null))
  })

我只会显示对数组的更新。如果您需要访问其他文档字段,试试这个:

r.db('test').table('test').changes()
  .filter(function(doc) {
    return doc('new_val')('data')('arr').ne(null).and(doc('old_val')('data')('arr').ne(null))
  })

毕竟,我决定放弃嵌入式数组并使用 table 联接,这避免了所有可能的黑客攻击。