2017-05-02 15 views
0

私は各プレイヤーの対戦相手を保存するために、このMongoのコレクションopponentsを持っていると、コレクションを更新する方法

{username:foo, foo:{foo1:0,foo2:0,foo3:0}} 
{username:foo1,foo1:{foo:0,foo2:0,foo3:0}} 
{username:foo2,foo2:{foo:0,foo1:0,foo3:0}}//i.e player foo2 play 0 games with foo,foo1 and foo3 

とのNode.jsサーバ側でこのtableオブジェクトの詳細をテーブル内の各プレイヤーのために、私は対戦相手の名前とラウンドをそれに応じてopponentコレクションに追加したい(もちろん追加する必要はない)。希望の結果は

{username:foo, foo:{foo1:3,foo2:3,foo3:3}} 
{username:foo1,foo1:{foo:3,foo2:3,foo3:3}} 
{username:foo2,foo2:{foo:3,foo1:3:foo3:3}} 
{username:foo3,foo3:{foo:3,foo1:3,foo2:3}} 

私はカスタム機能fun(name)を持っており、各プレイヤーに対戦相手の名前の配列を返します。そうfun(table[0].name)[foo1,foo2,foo3]

function fun(name){ 
    var result = []; 
    for (var i = 0; i <players.length; i++){ 
     if(players[i].name!=name){ 
     result.push(players[i].name) 
     } 
     } 
     return result; 
} 

を返しますこれは私の現在のコードです:

 for (var i =0;i<table.length;i++){ 
     db.opponents.update({username:table[i].name},{$inc:{[table[i].name + '.' + fun(table[i].name)[0] ] :table[i].rounds}}) 
     if (table.length>2){ 
     db.opponents.update({username:table[i].name},{$inc:{[table[i].name + '.' + fun(table[i].name)[1] ] :table[i].rounds}}) 
    } 
    if (table.length>3){ 
     db.opponents.update({username:table[i].name},{$inc:{[table[i].name + '.' + fun(table[i].name)[2] ] :table[i].rounds}}) 
    } 

しかしtable.length増加が、私はより多くのコード行を必要とする場合には、剛性のハードコーディングです。どのように変数を使用してよりコンパクトにすることができますか?ネストされたループを使用しようとしましたが、それはそれをさらに悪化させました。

答えて

0

問題は解決:

for (var i = 0; i < table.length; i++) { 
    db.opponents.update({username:table[i].name},{$inc:{[table[i].name + '.' + fun(table[i].name)[0] ] :table[i].rounds}}) 
    for (var j = 1;j<fun(table[i].name).length;j++){ 
     db.opponents.update({username:table[i].name},{$inc:{[table[i].name + '.' + fun(table[i].name)[j] ] :table[i].rounds}}) 
    } 
    }