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

MongoDB에서 $push 연산자로 기존 컬렉션에 문서 추가하기

MongoDB에서 이미 생성된 컬렉션에 새로운 문서를 추가하려면 $push 연산자를 사용하면 됩니다. $push는 배열 필드에 새로운 요소를 추가할 때 활용되는 업데이트 연산자로, 배열의 마지막에 값을 삽입합니다.

1. 컬렉션 생성 및 문서 삽입

먼저 insertOne() 메서드를 사용해 demo177 컬렉션을 생성하고 샘플 문서를 삽입해 보겠습니다.

> db.demo177.insertOne(
    { "Id": "101", "details": [
       { "StudentName": "Chris", "Scores": [67, 71, 74], "SubjectName": ["MySQL", "Java"] },
       { "StudentName": "David", "Scores": [89, 98, 45], "SubjectName": ["PL/SQL", "C"] }
    ] }
);
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e384b2b9e4f06af551997f4")
}

2. 현재 저장된 문서 확인하기

find() 메서드와 pretty()를 함께 사용하면 컬렉션 내 모든 문서를 보기 좋게 출력할 수 있습니다.

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

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

{
    "_id" : ObjectId("5e384b2b9e4f06af551997f4"),
    "Id" : "101",
    "details" : [
       {
          "StudentName" : "Chris",
          "Scores" : [ 67, 71, 74 ],
          "SubjectName" : [ "MySQL", "Java" ]
       },
       {
          "StudentName" : "David",
          "Scores" : [ 89, 98, 45 ],
          "SubjectName" : [ "PL/SQL", "C" ]
       }
    ]
}

3. $push로 기존 컬렉션에 문서 추가하기

이제 update() 메서드와 $push 연산자를 조합하여 details 배열에 새로운 학생 정보를 추가해 보겠습니다. 조건으로 Id가 "101"인 문서를 찾은 뒤, 해당 문서의 details 배열 끝에 새 요소를 삽입합니다.

> db.demo177.update({"Id": "101"},
...{
...  $push: {
...     "details": {
...        "StudentName": "Chris",
...        "Scores": [90, 91, 94],
...        "SubjectName": ["MongoDB", "SQL Server"]
...     }
...  }
...});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

실행 결과에서 nMatched가 1, nModified가 1로 표시되는 것을 확인할 수 있습니다. 이는 조건에 일치하는 문서 하나가 성공적으로 수정되었음을 의미합니다.

4. 업데이트 결과 확인하기

다시 find() 메서드를 실행하여 변경된 결과를 확인해 보겠습니다.

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

새로운 문서가 details 배열의 마지막에 정상적으로 추가된 것을 볼 수 있습니다.

{
    "_id" : ObjectId("5e384b2b9e4f06af551997f4"),
    "Id" : "101",
    "details" : [
       {
          "StudentName" : "Chris",
          "Scores" : [ 67, 71, 74 ],
          "SubjectName" : [ "MySQL", "Java" ]
       },
       {
          "StudentName" : "David",
          "Scores" : [ 89, 98, 45 ],
          "SubjectName" : [ "PL/SQL", "C" ]
       },
       {
          "StudentName" : "Chris",
          "Scores" : [ 90, 91, 94 ],
          "SubjectName" : [ "MongoDB", "SQL Server" ]
       }
    ]
}

참고 사항

MongoDB 최신 버전에서는 update() 대신 updateOne() 또는 updateMany() 메서드 사용이 권장됩니다. 예를 들어 위 코드는 다음과 같이 작성할 수 있습니다.

> db.demo177.updateOne(
   { "Id": "101" },
   { $push: { "details": { "StudentName": "Chris", "Scores": [90, 91, 94], "SubjectName": ["MongoDB", "SQL Server"] } } }
);

또한 $push 외에도 배열 맨 앞에 요소를 추가하는 $each, 중복을 방지하는 $addToSet 등의 연산자를 상황에 맞게 활용하면 더욱 효율적인 데이터 관리가 가능합니다.