1

私は次の問題にぶつかっています: 次の構造があるとします:

{
    "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 が null ではなく、new_val が null ではありません。

よろしくお願いします

4

2 に答える 2

2

結局、埋め込み配列を削除してテーブル結合を使用することにしました。これにより、考えられるすべてのハッキングを回避できます。

于 2016-03-16T08:25:00.010 に答える
1

このようなものを使用できます

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))
  })
于 2016-03-15T19:47:12.680 に答える