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

MongoDB에서 배열 필드를 역순으로 뒤집는 방법

MongoDB에서 배열(Array) 필드의 요소 순서를 반대로 뒤집고 싶다면 forEach() 메서드를 활용하면 됩니다. 이 글에서는 실제 예제를 통해 배열 필드를 역순으로 변경하는 과정을 단계별로 살펴보겠습니다.

1. 테스트용 컬렉션 생성

먼저 insertOne() 메서드를 사용해 문서가 포함된 컬렉션을 생성합니다. 여기서는 'Skills'라는 배열 필드를 가진 문서를 삽입해 보겠습니다.

> db.reverseArrayDemo.insertOne({"Skills":["C","Java"]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5ccddf99dceb9a92e6aa1946")
}

2. 현재 문서 확인하기

컬렉션에 저장된 모든 문서를 find() 메서드로 조회해 보겠습니다.

> db.reverseArrayDemo.find().pretty();

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{
    "_id" : ObjectId("5ccddf99dceb9a92e6aa1946"),
    "Skills" : [
        "C",
        "Java"
    ]
}

3. forEach()로 배열 필드 역순 변경하기

이제 forEach()를 사용해 각 문서를 순회하면서 배열 요소의 순서를 반대로 바꾸고, update()와 $set 연산자로 변경된 값을 다시 저장합니다.

> db.reverseArrayDemo.find().forEach(function (myDocument) {
...     var arrayValue = [ myDocument.Skills[1], myDocument.Skills[0] ];
...     db.reverseArrayDemo.update(myDocument, { $set: {Skills : arrayValue } });
... });

이 코드는 문서의 배열 요소 개수가 2개일 때 동작합니다. 요소의 인덱스를 서로 교환하여 새로운 배열을 만든 뒤 기존 필드를 덮어쓰는 방식입니다.

4. 변경 결과 확인

변경 후 다시 문서를 조회해 배열 필드가 실제로 역순으로 바뀌었는지 확인해 보겠습니다.

> db.reverseArrayDemo.find().pretty();

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

{
    "_id" : ObjectId("5ccddf99dceb9a92e6aa1946"),
    "Skills" : [
        "Java",
        "C"
    ]
}

'Skills' 배열의 순서가 ["C", "Java"]에서 ["Java", "C"]로 성공적으로 뒤집힌 것을 확인할 수 있습니다.

참고: $reverseArray 집계 연산자 활용

MongoDB 3.4 버전부터는 $reverseArray 집계 연산자를 제공하므로, 배열 전체를 한 번에 역순으로 만들 때 더욱 간편하게 처리할 수 있습니다.

> db.reverseArrayDemo.updateMany(
...   {},
...   [ { $set: { Skills: { $reverseArray: "$Skills" } } } ]
... );

배열의 크기와 관계없이 동작하므로, 요소 개수가 많거나 가변적인 경우에는 $reverseArray를 사용하는 것이 더 안전하고 효율적입니다.