0

次のようなドキュメントがあります

{
  ...
  reactions: [
    {
      user: 'user_id',
      reaction: 'reaction_name'
    }, {
      user: 'user_id',
      reaction: 'reaction_name'
    }
  ]  
  ...
}

一意になる「ユーザー」と「反応」の組み合わせに基づいて、配列反応の項目を削除しようとしています。反応配列をフィルタリングして、js ドライバーを使用して rethinkdb の特定の項目を削除するにはどうすればよいですか?

私はこれを試しました

r.db('db_name').table('messages').getAll(
                        get_single_message
                      ).update({
                        reactions: r.row('reactions').filter( (item) => {
                           return item('reaction').ne(body.reaction).and(item('user').ne(body.user))
                        })
                      }).run(this._rdbConn)

それが機能しない理由を理解しています (反応を与えていないすべての反応を返し、特定のユーザーを持たないその配列のサブセットを返します)。私が望むのは、それらの等しくないものが同期して実行されるため、提供された反応とユーザーを持つアイテムを含まない配列を返すことです。現時点では、リアクション OR ユーザーのように機能します。

4

2 に答える 2

0

仲間が私を助けてくれました。これは、私が達成しようとしていたことに対して機能する解決策ですが、等しくないことを利用していません。不等号を利用する別の解決策を誰かが持っている場合は、それを共有してください。

r.db('db_name').table('messages').getAll(
                        get_single_message
                      ).update({
                        reactions: r.row('reactions').filter(function (doc) {
                             return doc('reaction').eq(body.reaction).and(doc('user').eq(body.user)).not()
                         })
                      }).run(this._rdbConn)
于 2016-08-12T18:24:52.227 に答える