중요
더 이상 사용되지 않는 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 기본값 쓰기 고려 (write concern) 사용하는 명령을 사용합니다. 다른 쓰기 고려 (write concern) 지정하려면 옵션 매개변수에 쓰기 고려 (write concern) 포함하세요.
컬렉션 및 필드 생성 _id
컬렉션 존재하지 않으면 insert() 컬렉션 생성합니다.
삽입할 문서 에 _id 필드 지정되지 않은 mongod 경우 는 필드 추가하고 _id 문서 에 고유한 를 할당합니다. 대부분의 드라이버는 ObjectId를 생성하고 ObjectId() _id 필드 mongod 삽입하지만,_id 운전자 나 애플리케이션 수행하지 않는 경우 에서 을 생성하여 채웁니다.
문서에 _id 필드가 포함된 경우 중복 키 오류를 방지하려면 _id 값이 컬렉션 내에서 고유해야 합니다.
트랜잭션
insert() 분산된 트랜잭션 내에서사용할 수 있습니다.
중요
대부분의 경우 분산 트랜잭션은 단일 문서 쓰기에 비해 더 큰 성능 비용이 발생하므로 분산 트랜잭션의 가용성이 효과적인 스키마 설계를 대체할 수는 없습니다. 대부분의 시나리오에서 비정규화된 데이터 모델 (내장된 문서 및 배열) 은 계속해서 데이터 및 사용 사례에 최적일 것입니다. 즉, 대부분의 시나리오에서 데이터를 적절하게 모델링하면 분산 트랜잭션의 필요성이 최소화됩니다.
추가 트랜잭션 사용 고려 사항(예: 런타임 제한 및 oplog 크기 제한)은 프로덕션 고려사항을 참조하세요.
트랜잭션에서 컬렉션 생성
트랜잭션이 교차 샤드 쓰기 트랜잭션(write transaction)인 이 아닌 경우 분산 트랜잭션 내에서 컬렉션과 인덱스를 생성할 수 있습니다.
트랜잭션에서 존재하지 않는 컬렉션에 대한 삽입을 지정하면 MongoDB는 해당 컬렉션을 암시적으로 생성합니다.
쓰기 고려 및 트랜잭션
트랜잭션에서 실행되는 경우 작업에 대한 쓰기 고려를 명시적으로 설정하지 마세요. 트랜잭션에 쓰기 고려를 사용하려면 트랜잭션 및 쓰기 고려를 참조하세요.
oplog 항목
insert() 작업이 문서 성공적으로 삽입하면 oplog (작업 로그)에 항목이 추가됩니다. 작업이 실패하면 작업은 oplog 에 항목을 추가하지 않습니다.
예시
다음 예에서는 products 컬렉션 에 문서를 삽입합니다. 컬렉션 존재하지 않으면 insert() 이 컬렉션 만듭니다.
필드를 지정하지 않고 문서 삽입 _id
다음 예시 에서는 insert() 에 전달된 문서 에 _id 필드 포함되어 있지 않습니다.
db.products.insert( { item: "card", qty: 15 } )
삽입하는 동안 mongod에서 _id 필드를 만들고 삽입된 문서에서 확인된 대로 고유한 ObjectId() 값을 할당합니다:
{ "_id" : ObjectId("5063114bd386d8fadbd6b004"), "item" : "card", "qty" : 15 }
ObjectId 값은 작업이 실행되는 기기 및 시간에 따라 다릅니다. 따라서 사용자의 값은 예시의 값과 다를 수 있습니다.
필드를 지정하는 문서 삽입 _id
다음 예시 에서는 insert() 로 전달된 문서 에 _id 필드 포함되어 있습니다. 중복 키 오류를 방지하려면 _id 값은 컬렉션 내에서 고유해야 합니다.
db.products.insert( { _id: 10, item: "box", qty: 20 } )
이 작업은 products collection에 다음 문서를 삽입합니다.
{ "_id" : 10, "item" : "box", "qty" : 20 }
여러 문서를 삽입합니다.
다음 예시 문서 배열 에 전달하여 세 개의 문서에 대한 대량 삽입을 insert() 수행합니다. 기본값 으로 MongoDB 정렬된 삽입을 수행합니다.정렬된 삽입을 사용하는 경우, 문서 중 하나를 삽입하는 동안 오류가 발생하면 MongoDB 배열 의 나머지 문서를 처리 하지 않고 오류를 반환합니다.
배열의 문서에는 동일한 필드가 필요하지 않습니다. 예를 들어, 배열의 첫 번째 문서에는 _id 필드와 type 필드가 있습니다. 두 번째 및 세 번째 문서에는 _id 필드가 없으므로, mongod가 삽입 중에 두 번째 및 세 번째 문서를 위해 _id 필드를 생성합니다.
db.products.insert( [ { _id: 11, item: "pencil", qty: 50, type: "no.2" }, { item: "pen", qty: 20 }, { item: "eraser", qty: 25 } ] )
이 연산은 다음 세 개의 문서를 삽입했습니다.
{ "_id" : 11, "item" : "pencil", "qty" : 50, "type" : "no.2" } { "_id" : ObjectId("51e0373c6f35bd826f47e9a0"), "item" : "pen", "qty" : 20 } { "_id" : ObjectId("51e0373c6f35bd826f47e9a1"), "item" : "eraser", "qty" : 25 }
정렬되지 않은 삽입 수행
다음 예시에서는 세 개의 문서를 정렬하지 않고 삽입하는 작업을 수행합니다. 정렬되지 않은 삽입을 사용하는 경우 문서 중 하나를 삽입하는 동안 오류가 발생하면 MongoDB는 배열에 있는 나머지 문서를 계속 삽입합니다.
db.products.insert( [ { _id: 20, item: "lamp", qty: 50, type: "desk" }, { _id: 21, item: "lamp", qty: 20, type: "floor" }, { _id: 22, item: "bulk", qty: 100 } ], { ordered: false } )
기본 쓰기 우려 재정의
복제본 집합에 대한 다음 작업은 w: 2 의 쓰기 우려를 5000밀리초의 wtimeout 으로 지정합니다. 이 작업은 쓰기가 운영 서버와 보조 서버 모두에 전파되거나 5초 후에 타임아웃된 후에 반환됩니다.
db.products.insert( { item: "envelopes", qty : 100, type: "Clasp" }, { writeConcern: { w: 2, j: true, wtimeout: 5000 } } )
WriteResult
단일 문서 전달하면insert() 은 객체 WriteResult() 반환합니다.
성공적인 결과
성공 하면 반환된 WriteResult 객체 에 삽입된 문서 수에 대한 정보가 포함됩니다.
WriteResult({ "nInserted" : 1 })
우려 사항 오류 쓰기
에 쓰기 고려 (write concern) 오류가 발생하면 결과에 필드 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() 반환합니다.