코딩기록

JS) 몽고디비 - updateOne 배열 안의 객체 밸류 업데이트 본문

프론트/JavaScript

JS) 몽고디비 - updateOne 배열 안의 객체 밸류 업데이트

뽀짝코딩 2022. 3. 11. 05:04
728x90

 

console.log("------- 1 -----------");
const score = [
  { win:1 },
  { lose:0 }
];
const winScore = score[0].win +1;
const loseScore = score[1].lose +1;

console.log(score)
console.log(winScore)
console.log(loseScore)

console.log("------ 2 ------------");
const win = {score};
const winScore2 = win.score[0].win +1;
const loseScore2 = win.score[1].lose +1;

console.log(win)
console.log("winScore2:", winScore2)
console.log("loseScore2", loseScore2)
console.log("score[0].win:", score[0].win)

 

몽고 디비 updateOne을 할 때 이런 식으로 쓴다.

const updateWin = await Users.updateOne({id:winner}, {$set: {score:addWinScore}});

변수명 updateWin / async가 위에 있음 / user디비 / id(키)가 winner(밸류,winner안에 id가 있음)인 id를 찾고 / score키에 addWinScore값을 업데이트한다. 

내가 직면한 문제는 배열안에 있는 객체 중 [0]째 객체의 밸류에 addWinScore(Number)를 업데이트하는 것이다.

객체의 값에는 어떻게 업데이트하는지 매번 해와서 잘아는데 배열 안의 객체에는 어떻게 해야 하는지 감이 안 와서 고심 끝에 노드의 집단지성으로 특히 엔주님의 큰 도움으로 풀었다. 어리석은 나는 엔주님이 첨에 얘기 했을때는 안될것 같다 했지만 결국 엔주님의 99% 아이디어와  몽고 디비 공식문서 1%의 도움으로 풀었다. 

 

updateOne({id:winner}, {$set: {"score.0.win":addWinScore}}); 
user디비에 score는 아래와 같은 형식으로 들어가 있다.   {"배열안 0번째 win 객체": 들어갈변수명}   이렇게 쓴다.

 

score [
   { win : 0 },
   { lose: 0 }
]

 

 //win +1 저장
      const winScore = await Users.findOne({id:winner}, {_id:false, score:true});
      const addWinScore = winScore.score[0].win + 1;
      console.log("게임결과 승+1>", addWinScore);

      const updateWin = await Users.updateOne({id:winner}, {$set: {"score.0.win":addWinScore}});

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

*공식-몽고 디비

https://docs.mongodb.com/manual/reference/operator/update/set/

 

 

반응형
Comments