mongoDB에 데이터를 저장할 때 _id 를 넣어야하는데
자동으로 1,2,3... 이렇게 달아주면 좋겠다
결국 총게시물 갯수에 +1을 해주는 형태로 만들어줘야하는데
방법은...
아예 counter 라는 collection을 만들어서
totalPost 라는 항목을 만들어 값을 int 형인 0으로 준다.
그래서 데이터가 db에 올라올때마다 이 totalPost 값을 1씩 증가시키려고 한다.
이런식으로... 게시물 갯수를 관리하겠다는 뜻!
app.post("/add", function (요청, 응답) {
응답.send("전송완료");
db.collection("counter").findOne(
{ name: "게시물갯수" },
function (에러, 결과) {
console.log(결과.totalPost);
var 총게시물갯수 = 결과.totalPost;
db.collection("post").insertOne(
{ _id: 총게시물갯수 + 1, title: 요청.body.title, date: 요청.body.date },
function (에러, 결과) {
console.log("저장 완료");
}
);
}
);
});
누군가 /add 경로로 post 요청을하면
counter라는 collection에서 name이 "게시물갯수" 인 document를 findOne 으로 찾는다
그리고 이 데이터의 totalPost를 콘솔에 출력하고
총게시물갯수 라는 변수에 담는다.
그리고 post라는 collection에 _id가 총게시물갯수 + 1 인 데이터를 insertOne 으로 삽입한다.
* findOne 같은건 nodejs랑 mongoDB 쓸때 사용할 수 있는 함수라고 함.
그럼 totalPost를 totalPost + 1 로 update를 해야한다.
db 데이터를 수정하고 싶으면 updateOne 을 쓴다(하나일 경우)
여러개라면 updateMany 쓰기.
db.collection("counter").updateOne(
{ name: "게시물갯수" },
{ $inc: { totalPost: 1 } },
function (에러, 결과) {
if (에러) {
return console.log(에러);
}
console.log("totalPost 1 증가");
}
);
일단 counter라는 collection에서 name 이 "게시물갯수" 인 데이터를 찾는다(이걸 update 해줄거다)
그리고 다음 { } 에는 어떻게 수정할 건지 적는다.
여기가 문법이 좀 특이하다
{ $set : { totalPost : 100 } } 이렇게 set 을 쓰면 totalPost를 100으로 설정해달라 이거고
{ $inc : { totalPost : 5 } } 이렇게 inc 를 쓰면 totalPost를 5만큼 증가시켜달라 이거다.
(그 밖에 $min(기존값보다 적을 때만 변경), $rename(key 값 이름 변경) 등 이 있다)
나는 totalPost를 1 증가시켜야 하니까 코드를 저렇게 적었다.
그다음 콜백함수에는 function() {} 이 들어가면 되는데
여기에는 아무것도 안적어도 되긴하다. (실행하고 싶은 코드가 있으면 적으면 된다 순서대로.)
하지만 나는 에러가 있을 경우 에러를 콘솔에 출력하게 작성해봤다.