[MongoDB] 도큐먼트 삽입
- Database(데이터베이스)/NOSQL - MongoDB
- 2021. 11. 1. 19:33
참조
- 몽고DB 완벽가이드 3판
1. 도큐먼트 삽입
- 삽입은 몽고DB에 데이터를 추가하는 기본 방법입니다.
- 도큐먼트를 삽입하려면 컬렉션의 insertOne 메서드를 사용하면 됩니다.
- 아래와 같이 명령어를 사용하게 되면,
movies
라는 컬렉션에title
키를 가진Stand by Me
값이 삽입되었다는 의미입니다. - 도큐먼트에 "_id" 키도 추가가 됩니다.
db.movies.insertOne({"title" : "Stand by Me"});
1.1 insertMany
- 여러 도큐먼트를 컬렉션에 삽입하려면
insertMany
로 도큐먼트 배열을 데이터베이스에 전달합니다. - 코드가 삽입된 각 도큐먼트에 대해 데이터베이스로 왕복하지 않고 도큐먼트를 대량 삽입 하므로 훨씬 더 효율적입니다.
db.movies.insertMany([{"title" : "Ghostbusters"},
{"title" : "Stand by Me"},
{"title" : "태극기 휘날리며"},
{"title" : "어벤져스"},
{"title" : "이터널 션샤인"}]);
[
{
"_id": {
"$oid": "617fbbd508ae0ce2a6473bd8"
},
"title": "Ghostbusters"
},
{
"_id": {
"$oid": "617fbbd508ae0ce2a6473bd9"
},
"title": "Stand by Me"
},
{
"_id": {
"$oid": "617fbbd508ae0ce2a6473bda"
},
"title": "태극기 휘날리며"
},
{
"_id": {
"$oid": "617fbbd508ae0ce2a6473bdb"
},
"title": "어벤져스"
},
{
"_id": {
"$oid": "617fbbd508ae0ce2a6473bdc"
},
"title": "이터널 션샤인"
}
]
- 위와 같이 수십, 수백, 심지어는 수천 개의 도큐먼트를 한 번에 전송하면 도큐먼트 삽입이 매우 빨라집니다.
- insertMany는 여러 도큐먼트를 단일 컬렉션에 삽입할 때 유용한 함수 입니다.
1.1.1 insertMany 제약 사향
- 몽고DB의 현재 버전은 48 메가바이트보다 큰 메시지를 허용하지 않으므로 한 번에 일괄 삽입 할 수 있는 데이터의 크기에는 제한이 있습니다.
- 48 메가바이트보다 큰 삽입을 시도하면 많은 드라이버는 삽입된 데이터를 48 메가바이트 크기의 일괄 삽입 여러 개로 분할합니다.
1.1.2 insertMany 특정 유형의 오류
- insertMany를 사용해 대량 삽입할 때 배열 중간에 있는 도큐먼트에서 특정 유형의 오류가 발생하는 경우가 있습니다.
- 이 경우에는 정렬 연산을 선택했는지 혹은 비정렬 연산을 선택했는지에 따라 발생하는 상황이 달라집니다.
- insertMany에 대한 두 번째 매개변수로 옵션 도큐먼트를 지정할 수 있습니다.
- 도큐먼트가 제공된 순서대로 삽입되도록 옵션 도큐먼트에
"ordered"
키게 true를 지정합니다. - false를 지정하면 몽고DB가 성능을 개선하려고 삽입을 재배열 할 수 있습니다.
- 순서가 지정 되지 않았다면
정렬된 삽입
이 기본값입니다. - 다음 예에서는 정렬된 삽입이 기본값이므로 처음 두 개의 도큐먼트만 삽입됩니다.
db.movies.insertMany([{"_id" : 0, "title" : "Top Gun"},
{"_id" : 1, "title" : "태극기 휘날리며"},
{"_id" : 1, "title" : "어벤져스"},
{"_id" : 2, "title" : "이터널 션샤인"},
{"_id" : 3, "title" : "쏘우"},
{"_id" : 3, "title" : "해운대"},]);
E11000 duplicate key error collection: jbh_MongoDB.movies index: _id_ dup key: { _id: 1 }
_id
가 동일한 도큐먼트를 두 개 이상 삽입할 수 없으므로 세 번째 도큐먼트가 오류를 발생시켰습니다.- 아래와 같이 정렬되지 않은 삽입을 지정하면 배열의 첫 번째, 두 번째, 네 번째, 다섯 번째 도큐먼트가 삽입됩니다.
- 세 번째 도큐먼트만 중복된 "_id" 오류 때문에 삽입에 실패합니다.
db.movies.insertMany([
{"_id" : 0, "title" : "Top Gun"},
{"_id" : 1, "title" : "태극기 휘날리며"},
{"_id" : 1, "title" : "어벤져스"},
{"_id" : 2, "title" : "이터널 션샤인"},
{"_id" : 3, "title" : "쏘우"},
{"_id" : 4, "title" : "해운대"}
], {ordered : false});
E11000 duplicate key error collection: jbh_MongoDB.movies index: _id_ dup key: { _id: 1 }
1.2 삽입 유효성 검사
- 몽고DB는 삽입된 데이터에 최소한의 검사를 수행합니다.
- 도큐먼트의 기본 구조를 검사해
_id
필드가 존재하지 않으면 새로 추가하고, 모든 도큐먼트는 16메가바이트보다 작아야 하므로 크기를 검사합니다. - 이처럼 최소한의 검사를 하는 이유는, 유효하지 않은 데이터가 입력되는 것을 막기 위함입니다.
728x90
'Database(데이터베이스) > NOSQL - MongoDB' 카테고리의 다른 글
[MongoDB] 도큐먼트 갱신 (0) | 2021.11.03 |
---|---|
[MongoDB] 도큐먼트 삭제 (0) | 2021.11.02 |
[MongoDB] VSCode에서 MongoDB 명령어 실행하기 (0) | 2021.10.25 |
[MongoDB] 몽고DB 데이터형 (0) | 2021.10.24 |
[MongoDB] 몽고DB VSCode 연동하기 (0) | 2021.10.23 |
이 글을 공유하기