2017-05-02 6 views
0

나는 각 선수의 상대를 저장하기 위해이 몽고 수집 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}}) 
    } 
    }