Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 배열 요소 순서 변경하기 – 스왑(Swap) 개념을 활용한 쿼리 방법

MongoDB에서 배열 요소의 순서를 변경하는 방법

MongoDB에서 배열(array) 내부 요소들의 순서를 바꾸고 싶다면 스왑(swap, 값 교환) 개념을 활용하면 됩니다. 스왑은 두 값을 서로 맞바꾸는 기본적인 프로그래밍 기법으로, 임시 변수(temporary variable)를 사용해 첫 번째 요소와 두 번째 요소의 자리를 교환할 수 있습니다.

아래에서 실제 예제를 통해 단계별로 살펴보겠습니다.

1단계: 컬렉션 생성 및 문서 삽입

먼저 insertOne() 메서드를 사용해 배열 필드를 가진 문서를 컬렉션에 삽입합니다.

> db.demo301.insertOne({"Name":["Chris","David","Bob"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e4d6ff55d93261e4bc9ea51")
}

2단계: 현재 문서 확인하기

find() 메서드를 사용해 컬렉션의 모든 문서를 조회합니다.

> db.demo301.find();

위 쿼리는 다음과 같은 결과를 출력합니다.

{ "_id" : ObjectId("5e4d6ff55d93261e4bc9ea51"), "Name" : [ "Chris", "David", "Bob" ] }

현재 배열은 ["Chris", "David", "Bob"] 순서로 저장되어 있습니다.

3단계: 스왑 로직으로 배열 순서 변경

다음은 forEach()

> db.demo301.find({}, { Name : 1 }).forEach(function(n) {
...   var t = n.Name[0];
...   n.Name[0] = n.Name[1];
...   n.Name[1] = t;
...   db.demo301.update({ _id: n._id }, { $set: { Name: n.Name } });
...})

동작 원리:

  • var t = n.Name[0] : 첫 번째 요소("Chris")를 임시 변수 t에 저장합니다.
  • n.Name[0] = n.Name[1] : 두 번째 요소("David")를 첫 번째 자리에 넣습니다.
  • n.Name[1] = t : 임시 변수에 저장해 둔 값을 두 번째 자리에 넣습니다.
  • $set 연산자를 사용해 변경된 배열을 해당 문서에 업데이트합니다.

4단계: 변경 결과 확인

업데이트가 완료되면 다시 find() 메서드로 모든 문서를 조회합니다.

> db.demo301.find();

실행 결과는 다음과 같습니다.

{ "_id" : ObjectId("5e4d6ff55d93261e4bc9ea51"), "Name" : [ "David", "Chris", "Bob" ] }

출력 결과를 보면 첫 번째 요소와 두 번째 요소가 성공적으로 맞바뀌어 ["David", "Chris", "Bob"] 순서로 변경된 것을 확인할 수 있습니다.

참고 사항

위 예제는 MongoDB 구버전에서 사용되던 update() 메서드를 기준으로 작성되었습니다. 최신 버전(3.x 이상)에서는 updateOne() 또는 updateMany() 메서드를 사용하는 것이 권장됩니다. 예를 들어 마지막 줄을 다음과 같이 수정하면 됩니다.

db.demo301.updateOne({ _id: n._id }, { $set: { Name: n.Name } });

이처럼 스왑 개념과 forEach(), $set 연산자를 조합하면 MongoDB에서 배열 요소의 순서를 손쉽게 변경할 수 있습니다.