2016-09-11 3 views
1

TLDR:私が直面している最大の問題は、オブジェクトの1つにネストされたキーによって配列内のオブジェクトをフィルタリングする方法が見当たらないことです。rethinkdbのidでアレイ内のオブジェクトをフィルタリングする

このような構造を持つスキーマを仮定:

{ 
    some_field: "value", 
    some_array: [ 
    { 
     item: { 
      id: "some rethinkdb key", 
      name: "some object" 
     }, 
     relevant_field: { 
      id: "some rethinkdb key", 
      name: "so relevant", 
      properties: [ 
      { 
       id: "target key", 
       count: 2 
      }, 
      { 
       id: "some other rethinkdb key", 
       count: 1 
      }, 
      ] 
     } 
    }, 
    { 
     item: ... 
    } 
    ] 
} 

問題は次のとおりです。私はIDが「ターゲット・キー」とsome_array内部のオブジェクトのプロパティ内の「数」欄を更新したいです。私が今までに見つけた最良の方法は、私が更新したいアイテムの 'some_array'の位置を見つけて、受け入れられた答えによって提供されるこの質問にあるメソッドを適用することです:How to update embedded document?。私は他の問題についてもその方法を成功裏に使用しましたが、この方法では成功しませんでした。

EDIT:mlucyのコメントのおかげでjson構造が修正されました。

+1

を私はあなたの例を理解するいくつかの問題を抱えています。 'some_array'のオブジェクトには2つのフィールドがあり、両方とも' id'を持ち、 'properties'の構文が間違っています(配列やオブジェクトであると分かっていません)。 – mlucy

+0

@mlucyありがとう、本当に間違いでした。 Propertiesはオブジェクトの配列です。これらのオブジェクトの1つをidで更新したいとします。 –

答えて

0

あなたは書くことができます。

table.update(function(row) { 
    return {some_array: row('some_array').map(function(el) { 
    return {relevant_field: {properties: el('relevant_field')('properties').map(function(prop) { 
     return r.branch(prop('id').eq('target key'), prop.merge({count: prop('count').add(1)}), prop); 
    })}}; 
    })}; 
}) 
+0

私はこのコードをテストしており、カウントは増加していません。さらに、特定のsome_arrayオブジェクトのみを更新するのは、どの時点でもフィルタリングされていませんが、そのすべてを更新しようとしています。申し訳ありませんが、私はこの答えに答えるのにとても時間がかかりました。 –

関連する問題