Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ / /
Node.js 드라이버
/ /

문서 교체

이 가이드 에서는 Node.js 운전자 사용하여 MongoDB 컬렉션 의 문서 에서 바꾸기 작업을 수행하는 방법을 학습 수 있습니다. 바꾸기 작업은 업데이트 작업과 다르게 수행됩니다. 업데이트 작업은 대상 문서 에서 지정된 필드만 수정합니다. 바꾸기 작업은 대상 문서의 모든 필드를 제거하고 새 필드로 바꿉니다.

대체 작업을 수행하려면 대체 작업에 사용할 필드와 값으로 구성된 대체 문서 를 만듭니다. 대체 문서는 다음 형식을 사용합니다.

{
<field>: {
<value>
},
<field>: {
...
}
}

대체 문서란 쿼리 필터와 일치하는 기존 문서를 대체하려는 문서를 말합니다.

선택적 options 매개변수를 사용하여 upsert과 같은 더 많은 옵션을 지정할 수 있습니다. upsert 옵션 필드 true 로 설정하다 메서드는 쿼리 와 일치하는 문서 없을 때 새 문서 삽입합니다.

실행 중에 오류가 발생하면 replaceOne() 메서드에서 예외가 발생합니다. 예를 들어, 고유 인덱스 규칙을 위반하는 값을 지정하면 replaceOne() duplicate key error이(가) 발생합니다.

참고

업데이트 후 애플리케이션 에 문서 필요한 경우 컬렉션.findOneAndReplace() replaceOne()와 유사한 인터페이스를 가진 메서드입니다. 일치하는 원본 문서 또는 대체 문서 를 반환하도록 findOneAndReplace() 를 구성할 수 있습니다.

판매할 항목, 가격, 사용 가능한 수량을 설명하는 필드가 있는 myDB.items 컬렉션의 문서를 감안합니다.

{
_id: 501,
item: "3-wick beeswax candle",
price: 18.99,
quantity: 10,
}

이 문서를 완전히 다른 항목에 대한 설명이 포함된 문서로 대체하려고 한다고 가정해 보겠습니다. 대체 작업은 다음과 같이 유사할 수 있습니다.

const myDB = client.db("myDB");
const myColl = myDB.collection("items");
const filter = { _id: 501 };
// replace the matched document with the replacement document
const replacementDocument = {
item: "Vintage silver flatware set",
price: 79.15,
quantity: 1,
};
const result = await myColl.replaceOne(filter, replacementDocument);

대체된 문서에는 다음과 같이 대체 문서의 내용과 변경할 수 없는 _id 필드 등이 있습니다.

{
_id: 501,
item: "Vintage silver flatware set",
price: 79.15,
quantity: 1,
}

대체 작업이 컬렉션 의 문서와 일치하지 않는 경우 변경되지 않습니다. 대체를 시도하는 업서트 수행하도록 대체 작업을 구성할 수 있지만 일치하는 문서가 없는 경우 지정된 필드와 값이 포함된 새 문서 삽입합니다.

문서의 _id 필드를 수정하거나 고유 인덱스 제약 조건을 위반하는 값으로 필드를 변경할 수 없습니다. 고유 인덱스에 대한 자세한 내용은 MongoDB Server 매뉴얼을 참조하세요.

참고

설정 예시

이 예시 연결 URI를 사용하여 MongoDB 인스턴스 에 연결합니다. MongoDB 인스턴스에 연결하는 방법에 대해 자세히 학습하려면 MongoDB 에 연결 가이드를 참조하세요. 이 예시 Atlas 샘플 데이터 세트에 포함된 sample_mflix 데이터베이스movies 컬렉션도 사용합니다. Atlas 시작하기 가이드에 따라 MongoDB Atlas 의 무료 계층 에서 데이터베이스 에 로드할 수 있습니다.

다음 코드는 하나의 교체 작업을 수행하는 완전한 독립형 파일 입니다.

1import { MongoClient } from "mongodb";
2
3// Replace the uri string with your MongoDB deployment's connection string.
4const uri = "<connection string uri>";
5
6const client = new MongoClient(uri);
7
8async function run() {
9 try {
10
11 // Get the database and collection on which to run the operation
12 const database = client.db("sample_mflix");
13 const movies = database.collection("movies");
14
15 // Create a query for documents where the title contains "The Cat from"
16 const query = { title: { $regex: "The Cat from" } };
17
18 // Create the document that will replace the existing document
19 const replacement = {
20 title: `The Cat from Sector ${Math.floor(Math.random() * 1000) + 1}`,
21 };
22
23 // Execute the replace operation
24 const result = await movies.replaceOne(query, replacement);
25
26 // Print the result
27 console.log(`Modified ${result.modifiedCount} document(s)`);
28 } finally {
29 await client.close();
30 }
31}
32run().catch(console.dir);
1import { MongoClient } from "mongodb";
2
3// Replace the uri string with your MongoDB deployment's connection string.
4const uri = "<connection string uri>";
5
6const client = new MongoClient(uri);
7
8interface Movie {
9 title: string;
10}
11
12async function run() {
13 try {
14 const database = client.db("sample_mflix");
15 const movies = database.collection<Movie>("movies");
16
17 const result = await movies.replaceOne(
18 { title: { $regex: "The Cat from" } },
19 {
20 title: `The Cat from Sector ${Math.floor(Math.random() * 1000) + 1}`,
21 }
22 );
23 console.log(`Modified ${result.modifiedCount} document(s)`);
24 } finally {
25 await client.close();
26 }
27}
28run().catch(console.dir);

앞의 예시를 실행하면 다음과 같은 결과가 출력됩니다.

Modified 1 document(s)

이 가이드에서 설명하는 유형 또는 메서드에 대해 자세히 알아보려면 다음 API 문서를 참조하세요.

돌아가기

문서 수정

이 페이지의 내용