2016-08-12 5 views
0

に等しくない(NE)私は「ユーザー」の組み合わせに基づいて、アレイの反応で項目を削除しようとしている以下のRethinkdb - 複数のフィールド

{ 
    ... 
    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) 

を試してみた

。 私が欲しいのは、等価でないものが同期して実行されるため、提供された反応ANDを持つアイテムを含まない配列を返します。今は反応ORユーザのように機能します。

+0

の異なる形式を使用することができます! – dalanmiller

答えて

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) 
0

ここ.neせずにこれを行うには、おそらくもっと簡単な方法です:

r.db('db_name').table('messages').getAll(
         get_single_message 
        ).update({ 
         reactions: r.row('reactions').difference([{ 
          reaction: body.reaction, 
          user: body.user 
         }]) 
         }).run(this._rdbConn) 

だけ.differenceは配列からそのオブジェクトのすべてのインスタンスを削除しますので、これが唯一のシングルがあることを前提としていることを警告されます反応とユーザーの固有の組み合わせのインスタンス

それとも、あなたが既に持っているものに密接にそれを維持し、あなたが十分な回答の@ millejo3としてこれらのいずれかをマークする必要があります.and()

... 
reactions: r.row('reactions').filter((item) => { 
          return r.and(item('reaction').ne(body.reaction), item('user').ne(body.user)) 
         }) 
... 
関連する問題