중요
더 이상 사용되지 않는 mongosh 메서드
이 메서드는 mongosh에서 더 이상 사용되지 않습니다. 대체 메서드는 레거시 mongo shell과의 호환성 변경 사항을 참조하세요.
정의
db.collection.insert()컬렉션에 문서를 하나 이상 삽입합니다.
반환합니다: 단일 삽입용 WriteResult 객체.
대량 삽입용 BulkWriteResult 객체.
구문
db.collection.insert() 의 구문은 다음과 같습니다:
db.collection.insert( <document or array of documents>, { writeConcern: <document>, ordered: <boolean> } )
매개변수
Parameter | 유형 | 설명 |
|---|---|---|
| 문서 또는 배열 | 컬렉션에 삽입할 문서 또는 문서 배열입니다. |
| 문서 | 선택 사항. 쓰기 고려 (write concern) 표현하는 문서 . 기본값 쓰기 고려 (write concern) 사용하려면 생략합니다. 쓰기 고려를 참조하세요. 트랜잭션에서 실행되는 경우 작업에 대한 쓰기 고려를 명시적으로 설정하지 마세요. 트랜잭션에 쓰기 고려를 사용하려면 트랜잭션 및 쓰기 고려를 참조하세요. |
| 부울 | 선택 사항.
기본값은 |
동작
쓰기 고려
insert() 메서드는 insert 기본 쓰기 고려를 사용하는 명령을 사용합니다. 다른 쓰기 고려를 지정하려면 옵션 매개변수에 쓰기 고려를 포함합니다.
컬렉션 및 _id 필드 생성
컬렉션이 존재하지 않으면 insert()가 컬렉션을 생성합니다.
문서에 _id 필드가 지정되지 않은 경우, mongod에서 _id 필드를 추가하고 문서에 고유한 ObjectId()를 할당합니다. 대부분의 드라이버는 ObjectId를 생성하고 _id 필드를 삽입하지만, 드라이버나 애플리케이션이 수행하지 않는 경우 mongod에서 _id를 생성하여 채웁니다.
문서에 _id 필드가 포함된 경우 중복 키 오류를 방지하려면 _id 값이 컬렉션 내에서 고유해야 합니다.
트랜잭션
insert() 분산 트랜잭션 내에서 사용할 수 있습니다.
중요
대부분의 경우 분산 트랜잭션은 단일 문서 쓰기에 비해 더 큰 성능 비용이 발생하므로 분산 트랜잭션의 가용성이 효과적인 스키마 설계를 대체할 수는 없습니다. 대부분의 시나리오에서 비정규화된 데이터 모델 (내장된 문서 및 배열) 은 계속해서 데이터 및 사용 사례에 최적일 것입니다. 즉, 대부분의 시나리오에서 데이터를 적절하게 모델링하면 분산 트랜잭션의 필요성이 최소화됩니다.
추가 트랜잭션 사용 고려 사항(예: 런타임 제한 및 oplog 크기 제한)은 프로덕션 고려사항을 참조하세요.
트랜잭션에서 컬렉션 생성
트랜잭션이 교차 샤드 쓰기 트랜잭션(write transaction)인 이 아닌 경우 분산 트랜잭션 내에서 컬렉션과 인덱스를 생성할 수 있습니다.
트랜잭션에서 존재하지 않는 컬렉션에 대한 삽입을 지정하면 MongoDB는 해당 컬렉션을 암시적으로 생성합니다.
쓰기 고려 및 트랜잭션
트랜잭션에서 실행되는 경우 작업에 대한 쓰기 고려를 명시적으로 설정하지 마세요. 트랜잭션에 쓰기 고려를 사용하려면 트랜잭션 및 쓰기 고려를 참조하세요.
oplog 항목
insert() 작업으로 문서가 성공적으로 삽입되면 작업은 oplog (작업 로그)에 항목을 추가합니다. 작업이 실패하면 작업은 oplog에 항목을 추가하지 않습니다.
예시
이 페이지의 예시에서는 sample_mflix 샘플 데이터 세트의 데이터를 사용합니다. 이 데이터 세트를 자체 관리형 MongoDB 배포서버에 로드하는 방법에 대한 자세한 내용은 샘플 데이터 세트 로드를 참조하세요. 샘플 데이터베이스를 수정한 경우 이 페이지의 예시를 실행 하려면 데이터베이스를 제거하고 다시 만들어야 할 수 있습니다.
_id 필드를 지정하지 않고 문서 삽입
다음 예시 _id 필드 없는 문서 movies 컬렉션 에 삽입합니다.
db.movies.insert( { title: "Inception", year: 2010, genres: [ "Action", "Sci-Fi" ] } )
{ acknowledged: true, insertedIds: { '0': "..." } }
삽입된 문서 가 포함되어 있지 않으므로 _id mongod 는 _id 필드 만들어 추가하고 고유한 ObjectId() 값을 할당합니다.
ObjectId 값은 작업이 실행되는 기기 및 시간에 따라 다릅니다. 따라서 사용자의 값은 예시의 값과 다를 수 있습니다.
_id 필드를 지정하는 문서 삽입
다음 예시 movies 컬렉션 에 삽입된 문서 에서 _id 필드 지정합니다. 중복 키 오류를 방지하려면 _id 값은 컬렉션 내에서 고유해야 합니다.
db.movies.insert( { _id: 10, title: "Inception", year: 2010 } )
{ acknowledged: true, insertedIds: { '0': 10 } }
여러 문서를 삽입합니다.
다음 예시 문서 배열 을 에 전달하여 대량 삽입을 insert() 수행합니다. 기본값 으로 MongoDB 정렬된 삽입을 수행합니다.정렬된 삽입을 사용하는 경우, 문서 중 하나를 삽입하는 동안 오류가 발생하면 MongoDB 배열 의 나머지 문서를 처리 하지 않고 오류를 반환합니다.
첫 번째 문서 필드 _id 지정합니다. 두 번째 및 세 번째 문서에는 _id 필드 포함되어mongod 있지 않으므로 는 _id 삽입 중에 해당 문서에 대한 필드 만들고 추가합니다.
db.movies.insert( [ { _id: 11, title: "Inception", year: 2010, genres: [ "Action", "Sci-Fi" ] }, { title: "The Matrix", year: 1999 }, { title: "Interstellar", year: 2014 } ] )
{ acknowledged: true, insertedIds: { '0': 11, '1': "...", '2': "..." } }
정렬되지 않은 삽입 수행
다음 예시에서는 세 개의 문서를 정렬하지 않고 삽입하는 작업을 수행합니다. 정렬되지 않은 삽입을 사용하는 경우 문서 중 하나를 삽입하는 동안 오류가 발생하면 MongoDB는 배열에 있는 나머지 문서를 계속 삽입합니다.
db.movies.insert( [ { _id: 20, title: "2001: A Space Odyssey", year: 1968 }, { _id: 21, title: "A Clockwork Orange", year: 1971 }, { _id: 22, title: "The Shining", year: 1980 } ], { ordered: false } )
기본 쓰기 우려 재정의
복제본 집합에 대한 다음 작업은 w: 2 의 쓰기 우려를 5000밀리초의 wtimeout 으로 지정합니다. 이 작업은 쓰기가 운영 서버와 보조 서버 모두에 전파되거나 5초 후에 타임아웃된 후에 반환됩니다.
db.movies.insert( { title: "The Revenant", year: 2015 }, { writeConcern: { w: 2, j: true, wtimeout: 5000 } } )
WriteResult
단일 문서가 전달되면 insert()는 WriteResult() 객체를 반환합니다.
성공적인 결과
성공 시 반환되는 WriteResult 객체에는 삽입된 문서 수에 대한 정보가 포함됩니다.
WriteResult({ "nInserted" : 1 })
우려 사항 오류 쓰기
insert()에서 쓰기 고려 오류가 발생하면 결과에 WriteResult.writeConcernError 필드가 포함됩니다.
WriteResult({ "nInserted" : 1, "writeConcernError"({ "code" : 64, "errmsg" : "waiting for replication timed out", "errInfo" : { "wtimeout" : true, "writeConcern" : { "w" : "majority", "wtimeout" : 100, "provenance" : "getLastErrorDefaults" } } })
쓰기 우려와 관련이 없는 오류
insert()에서 쓰기 고려 (write concern) 오류가 발생하면 결과에는 WriteResult.writeError 필드가 포함됩니다.
WriteResult({ "nInserted" : 0, "writeError" : { "code" : 11000, "errmsg" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.foo.$_id_ dup key: { : 1.0 }" } })
BulkWriteResult
문서 배열을 전달하면 insert()는 BulkWriteResult() 객체를 반환합니다.