MongoDB의 db.collection.save() 메서드는 전달된 문서에 _id 필드가 포함되어 있는지 여부에 따라 동작이 달라집니다. _id가 존재하면 해당 문서를 업데이트(교체)하고, _id가 없으면 새로운 문서를 삽입합니다.
save() 메서드의 기본 개념
즉, save()는 하나의 메서드로 삽입(insert)과 교체(replace) 두 가지 작업을 모두 처리할 수 있는 편리한 도구입니다. 다만 최신 MongoDB 버전에서는 이 메서드가 더 이상 권장되지 않으며(deprecated), 대신 insertOne(), replaceOne(), updateOne() 사용이 권장됩니다.
컬렉션 생성 및 문서 저장 예제
먼저 save() 메서드를 사용하여 컬렉션에 문서들을 생성해 보겠습니다.
> db.demo481.save({"FirstName":"Chris","LastName":"Brown"});
WriteResult({ "nInserted" : 1 })
> db.demo481.save({"FirstName":"David","LastName":"Miller"});
WriteResult({ "nInserted" : 1 })
> db.demo481.save({"FirstName":"John","LastName":"Doe"});
WriteResult({ "nInserted" : 1 })
> db.demo481.save({"FirstName":"John","LastName":"Smith"});
WriteResult({ "nInserted" : 1 })각 명령 실행 후 WriteResult({ "nInserted" : 1 })가 반환되는데, 이는 문서가 성공적으로 삽입되었음을 의미합니다.
find()로 저장된 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다.
> db.demo481.find();
위 명령을 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e82db39b0f3fa88e227909c"), "FirstName" : "Chris", "LastName" : "Brown" }
{ "_id" : ObjectId("5e82db45b0f3fa88e227909d"), "FirstName" : "David", "LastName" : "Miller" }
{ "_id" : ObjectId("5e82db4db0f3fa88e227909e"), "FirstName" : "John", "LastName" : "Doe" }
{ "_id" : ObjectId("5e82db52b0f3fa88e227909f"), "FirstName" : "John", "LastName" : "Smith" }정리
save() 메서드는 _id 값의 유무에 따라 자동으로 삽입 또는 업데이트를 수행합니다. 하지만 코드의 의도를 명확하게 하고 최신 MongoDB와의 호환성을 유지하려면, 새 문서 추가 시에는 insertOne(), 기존 문서 교체 시에는 replaceOne()을 사용하는 것이 좋습니다.