Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / /

db.collection.insert()

이 페이지의 내용

  • 정의
  • 호환성
  • 구문
  • 동작
  • 예시
  • WriteResult
  • BulkWriteResult

중요

더 이상 사용되지 않는 mongosh 메서드

이 메서드는 mongosh에서 더 이상 사용되지 않습니다. 대체 메서드는 레거시 mongo shell과의 호환성 변경 사항을 참조하세요.

db.collection.insert()

컬렉션에 문서를 하나 이상 삽입합니다.

반환합니다:
  • 단일 삽입용 WriteResult 객체.

  • 대량 삽입용 BulkWriteResult 객체.

다음 환경에서 호스팅되는 배포에 db.collection.Insert() 사용할 수 있습니다.

  • MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스

  • MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전

  • MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전

insert() 메서드의 구문은 다음과 같습니다.

db.collection.insert(
<document or array of documents>,
{
writeConcern: <document>,
ordered: <boolean>
}
)
Parameter
유형
설명
document
문서 또는 배열
컬렉션에 삽입할 문서 또는 문서 배열입니다.
writeConcern
문서

선택 사항입니다. 쓰기 고려를 표현하는 문서입니다. 기본 쓰기 고려를 사용하려면 생략합니다. 쓰기 고려를 참조하세요.

트랜잭션에서 실행되는 경우 작업에 대한 쓰기 고려를 명시적으로 설정하지 마세요. 트랜잭션에 쓰기 고려를 사용하려면 트랜잭션 및 쓰기 고려를 참조하세요.

ordered
부울

선택 사항. true인 경우 배열에 있는 문서를 순서대로 삽입하고, 문서 중 하나에서 오류가 발생하면 MongoDB는 배열에 있는 나머지 문서를 처리하지 않고 반환합니다.

false인 경우 정렬되지 않은 삽입을 수행하고 문서 중 하나에서 오류가 발생하면 배열의 나머지 문서를 계속 처리합니다.

기본값은 true입니다.

insert()는 작업 상태가 포함된 객체를 반환합니다.

insert() 메서드는 기본 쓰기 고려를 사용하는 insert 명령을 사용합니다. 다른 쓰기 고려를 지정하려면 옵션 매개변수에 쓰기 고려를 포함합니다.

컬렉션이 존재하지 않으면 insert() 메서드가 컬렉션을 생성합니다.

문서에 _id 필드가 지정되지 않은 경우, MongoDB는 _id 필드를 추가하고, 삽입하기 전에 문서에 고유한 ObjectId()를 할당합니다. 대부분의 드라이버는 ObjectId를 생성하고 _id 필드를 삽입하지만, 드라이버나 애플리케이션이 그렇지 않은 경우 mongod_id를 생성하여 채웁니다.

문서에 _id 필드가 포함된 경우 중복 키 오류를 방지하려면 _id 값이 컬렉션 내에서 고유해야 합니다.

db.collection.insert()분산 트랜잭션 내에서 사용할 수 있습니다.

중요

대부분의 경우 분산 트랜잭션은 단일 문서 쓰기에 비해 더 큰 성능 비용이 발생하므로 분산 트랜잭션의 가용성이 효과적인 스키마 설계를 대체할 수는 없습니다. 대부분의 시나리오에서 비정규화된 데이터 모델 (내장된 문서 및 배열) 은 계속해서 데이터 및 사용 사례에 최적일 것입니다. 즉, 대부분의 시나리오에서 데이터를 적절하게 모델링하면 분산 트랜잭션의 필요성이 최소화됩니다.

추가 트랜잭션 사용 고려 사항(예: 런타임 제한 및 oplog 크기 제한)은 프로덕션 고려사항을 참조하세요.

트랜잭션이 교차 샤드 쓰기 트랜잭션(write transaction)인 아닌 경우 분산 트랜잭션 내에서 컬렉션과 인덱스를 생성할 수 있습니다.

트랜잭션에서 존재하지 않는 컬렉션에 대한 삽입을 지정하면 MongoDB는 해당 컬렉션을 암시적으로 생성합니다.

다음도 참조하세요.

트랜잭션에서 실행되는 경우 작업에 대한 쓰기 고려를 명시적으로 설정하지 마세요. 트랜잭션에 쓰기 고려를 사용하려면 트랜잭션 및 쓰기 고려를 참조하세요.

db.collection.insert() 작업으로 문서가 성공적으로 삽입되면 작업은 oplog(작업 로그)에 항목을 추가합니다. 작업이 실패하면 작업은 oplog에 항목을 추가하지 않습니다.

다음 예시에서는 products 컬렉션에 문서를 삽입합니다. 컬렉션이 존재하지 않는 경우 insert() 메서드가 컬렉션을 생성합니다.

다음 예시에서는 insert() 메서드로 전달된 문서에 _id 필드가 포함되어 있지 않습니다.

db.products.insert( { item: "card", qty: 15 } )

삽입하는 동안 mongod에서 _id 필드를 만들고 삽입된 문서에서 확인된 대로 고유한 ObjectId() 값을 할당합니다:

{ "_id" : ObjectId("5063114bd386d8fadbd6b004"), "item" : "card", "qty" : 15 }

ObjectId 값은 작업이 실행되는 기기 및 시간에 따라 다릅니다. 따라서 사용자의 값은 예시의 값과 다를 수 있습니다.

다음 예시에서는 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, wtimeout: 5000 } }
)

단일 문서가 전달되면 insert()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() 메서드에서 쓰기 고려가 아닌 오류가 발생하면 결과에 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 }"
}
})

문서 배열을 전달하면 insert()BulkWriteResult() 객체를 반환합니다. 자세한 내용은 BulkWriteResult()를 참조하세요.

돌아가기

db.collection.hideIndex