2016-09-14 4 views
0

ユーザーがラベルを選択するたびに、cを増やそうとしています。

私のサンプルデータセットは、2つのネストされた配列があります。たとえば

{ 
    "id": 123, 
    "labels": [ 
     { 
      "label": "orange", 
      "hitCount": 2, 
      "hits": [ 
       { 
        "who": "bob", 
        "c": "2" 
       } 
      ] 
     }, 
     { 
      "label": "red", 
      "hitCount": 6, 
      "hits": [ 
       { 
        "who": "bob", 
        "c": "5" 
       }, 
       { 
        "who": "alice", 
        "c": "1" 
       } 
      ] 
     } 
    ] 
} 

「をので、私は、私は5〜6

に赤のオブジェクトの内部ボブのオブジェクトの内部cをすることができますインクリメントしたい再びred選択bob t $を2回使用して複数の配列内を移動するhttps://docs.mongodb.com/manual/reference/operator/update/positional/#nested-arrays

誰もが2つ以上のレベルの配列を走査する方法を知っています。 $incの参照を取得しますか?

+2

これが現在可能かどうかはわかりませんが、現在はJIRAの項目です:https://jira.mongodb.org/br owse/SERVER-831 集計を使用して必要な結果を得たり、$ outを使用してコレクションを更新したり、データモデルの変更を検討することができます。 – dyouberg

答えて

0

私はあなたにあなたのデータモデルを変更することをお勧め:そして、あなたは、このコマンドを使用してヒットを更新することができ

{ 
    "id": 123, 
    "labels": [ 
     { 
      "label": "orange", 
      "hitCount": 2, 
      "hits": { 
       "bob": 2 
      } 
     }, 
     { 
      "label": "red", 
      "hitCount": 6, 
      "hits": { 
       "bob":5, 
       "alice":1 
      } 
     } 
    ] 
} 

db.hits.update(
    { 'labels.label': 'red' }, 
    { '$inc': { 'labels.$.hitCount': 1, 'labels.$.hits.bob': 1 } } 
); 

あなたは、動的ユーザ名で更新を構築する必要がある場合は、あなたが行うことができますそれ:

var userName = 'bob'; 
var updateCommand = { 
    $inc: { 
    'labels.$.hitCount': 1 
    } 
}; 
updateCommand.$inc['labels.$.hits.' + userName] = 1; 

db.hits.update({ 'labels.label': 'red' }, updateCommand); 
関連する問題