한 번의 작업으로 삽입 또는 업데이트
개요
애플리케이션이 MongoDB에 데이터를 저장하고 수정하는 경우 삽입 및 업데이트 작업을 사용할 수 있습니다. 특정 작업 흐름에서는 삽입 작업을 수행할지 아니면 업데이트 작업을 수행할지 여부는 문서 존재 여부에 따라 달라집니다. 이러한 경우 다음 메서드에서 사용할 수 있는 upsert
옵션을 사용하여 애플리케이션 로직을 간소화할 수 있습니다.
이러한 메서드에 전달된 쿼리 필터가 일치하는 항목을 찾지 못하고 upsert
옵션을 true
로 설정한 경우, MongoDB는 업데이트 문서를 삽입합니다. 예를 들어 보겠습니다.
업데이트 수행
애플리케이션에서 푸드 트럭의 현재 위치를 추적하여 다음과 같은 myDB.foodTrucks
컬렉션에 가장 가까운 주소 데이터를 저장한다고 가정합니다.
[ { name: "Haute Skillet", address: "42 Avenue B" }, { name: "Lady of the Latke", address: "35 Fulton Rd" }, ... ]
애플리케이션 사용자로서 푸드트럭의 평소 위치가 변경된다는 내용을 읽고 업데이트를 적용하고자 합니다. 이 업데이트 작업은 다음과 유사할 수 있습니다:
const myDB = client.db("myDB"); const myColl = myDB.collection("foodTrucks"); const query = { name: "Deli Llama" }; const update = { $set: { name: "Deli Llama", address: "3 Nassau St" }}; const options = {}; myColl.updateOne(query, update, options);
만약 'Deli Llama'라는 이름의 푸드 트럭이 존재한다면, 위의 메소드 호출은 컬렉션에서 문서를 업데이트합니다. 그러나 컬렉션에 'Deli Llama'라는 이름의 푸드 트럭이 없는 경우 변경 사항이 적용되지 않습니다.
업서트 수행
컬렉션에 푸드 트럭에 대한 정보가 아직 없고, 해당 푸드 트럭에 대한 정보를 추가하려는 경우를 생각해 보세요. 문서 삽입과 업데이트 중 어떤 작업을 해야 할지 결정하기 위해 먼저 문서의 존재 여부를 쿼리하는 대신 다음과 같이 updateOne()
호출에서 upsert
를 true
로 설정할 수 있습니다.
const query = { name: "Deli Llama" }; const update = { $set: { name: "Deli Llama", address: "3 Nassau St" }}; const options = { upsert: true }; myColl.updateOne(query, update, options);
위의 작업을 실행한 후 작업 전에 컬렉션에 "Deli Llama"
문서가 없더라도 컬렉션은 다음과 유사하게 표시됩니다.
[ { name: "Haute Skillet", address: "42 Avenue B" }, { name: "Lady of the Latke", address: "35 Fulton Rd" }, { name: "Deli Llama", address: "3 Nassau St" }, ... ]