포시코딩

[Express + Mongoose] Array에 담긴 데이터 여러개 update $push 하기 본문

Node.js

[Express + Mongoose] Array에 담긴 데이터 여러개 update $push 하기

포시 2022. 12. 3. 21:48
728x90

개요

위 사진과 같은 collection이 있을 때, members 안에 멤버 Object를 추가해줘야 하는 상황이다.

 

Raid.updateOne(
    { _id: ObjectId(_id) }, 
    {
        $push: {
            members: 멤버 Object
        }
    }
    // ...생략
);

일반적이면 그냥 updateOne에 $push를 쓸테지만 

데이터가 얼마나 많을지 몰라 이걸 계속 디비에 반복해서 작업하게 할 순 없었다.

 

목적은 요청 한번으로 디비안에 members에 [member1, member2, member3, ...]을 기존 데이터에 추가로 넣어주는 것이었는데 

Array에 대해 $each를 써줌으로 해결할 수 있었다.

 

$each

말그대로 Array의 각 데이터를 그 위의 명시해놓은 $push 처리를 해주는 방식이다. 

Raid.updateOne(
    { _id: ObjectId(_id) }, 
    {
        $push: {
            members: {
                $each: member_object_arr // [member1, member2, ...]
            }
        }
    },
    // ...생략
);

코드를 위와 같이 수정하고 바로 테스트해보자.

 

생각대로 Array안의 데이터가 각각 잘 push 됐다.

근데 받아온 Array 그대로 넣어줬기 때문에 _id가 ObjectId화 되어있지 않은 모습이다. 

이 부분은 그냥 forEach돌며 바꿔주는 식으로 처리했다.

 

N만큼의 시간복잡도가 추가되는 것이기에 큰 영향이 없다고 판단

 

결과확인

Mongoose에서 이렇게 Array 안에 담긴 데이터들을 한번에 $push 하는 법에 대해 알아보았다.

 

 

 

 

참고사이트: 

https://attacomsian.com/blog/mongoose-push-pull-items-from-array

 

How to push or pull item from an array in Mongoose

A quick guide to learn about $push and $pull operators in Mongoose to push and pull items from an array field.

attacomsian.com

728x90