본문 바로가기
쿤즈 Server/MongoDB

[MongoDB] 데이터 입력 insert() (2) : 배열 넣기 및 옵션

by :)Koon 2021. 4. 1.

지난 포스팅에 이어서 데이터(Document)를 넣는 방법을 추가적으로 알아보도록 하겠습니다.

2021.03.30 - [쿤즈 Server/MongoDB] - [MongoDB] 데이터 입력 (insert) 사용 방법

 

[MongoDB] 데이터 입력 (insert) 사용 방법

MongoDB에서 shell을 이용해서 데이터를 확인하는 방법을 알아보았습니다. mongo shell을 설치하고 사용하는 방법은 아래 링크에서 확인해주세요. 2021.03.27 - [쿤즈 Server/MongoDB] - [MongoDB] mongo shell을..

koonsland.tistory.com

지난 포스팅에서는 데이터 입력을 한 개의 데이터만 넣는 것을 해봤어요. insert() 함수를 이용해서 데이터를 JSON형태에 맞게 넣어주었습니다.

 

이번 포스팅에서는 데이터를 여러 개인 배열로 넣는 방법을 알아보도록 하겠습니다.


MongoDB에 데이터 배열로 넣기

먼저 Mongo shell을 이용해서 접속부터 하도록 합니다. 쉘을 이용해서 접속하는 방법은 이전 포스팅에서 다뤘으니 참고해주세요.

2021.03.27 - [쿤즈 Server/MongoDB] - [MongoDB] mongo shell을 이용한 mongodb 접속 방법(Windows / macOS)

 

[MongoDB] mongo shell을 이용한 mongodb 접속 방법(Windows / macOS)

데이터베이스를 볼 때는 Visual이 있는 툴이 있으면 굉장히 보기 편리합니다. 하지만 툴을 열고 다시 접속하고 하는 시간이 오래 걸리죠. 그리고 때로는 shell이 편한 경우가 많습니다. MongoDB 역시 A

koonsland.tistory.com

쉘에 접속했다면 mongo shell 프롬프트가 등장합니다. 이번엔 sample_training이라는 DB의 inspections Collection을 이용해 보도록 하겠습니다.

먼저 데이터가 어떻게 생겼는지 확인해 볼게요.

MongoDB> db.inspections.findOne()

그럼 데이터를 넣어보도록 하겠습니다. MongoDB는 데이터를 넣는 것이 굉장히 유연합니다. 꼭 저 형식에 맞지 않더라도 데이터가 들어가기 때문에 어떠한 Collections을 사용해도 상관없습니다.


3개의 데이터 한 번에 넣기

데이터를 아래와 같이 배열로 넣어보겠습니다.

MongoDB> db.inspections.insert([ { "test": 1 }, { "test": 2 }, { "test": 3 } ])

3개의 데이터가 모두 정상적으로 들어간 것을 확인할 수 있습니다. 배열로 넣을 때는 각각의 JSON Object를 대괄호([ ]) 로 묶어서 콜론(,)으로 구분하시면 됩니다.


ObjectID에 해당하는 _id 중복해서 넣기

만약 _id값 중복해서 넣는다면 어떻게 될까요? _id는 ObjectID로 사용하는 값입니다. 한번 중복해서 넣어보도록 하겠습니다.

MongoDB> db.inspections.insert([{ "_id": 1, "test": 1 },{ "_id": 1, "test": 2 }, { "_id": 3, "test": 3 }])

duplicate key라는 에러가 발생합니다. 하지만 nInserted 값이 1이 되었습니다. 즉 첫 번째 {"_id" : 1, "test": 1}인 값은 정상적으로 저장되었고, 두 번째 {"_id": 1, "test": 2} 값이 _id가 중복되어 저장되지 않은 것입니다. 따라서 마지막 값도 저장되지 않고 종료됩니다. 결과를 확인해 보겠습니다.

MongoDB> db.inspections.find({ "_id": 1 })

_id 가 1인 첫 번째 데이터만 정상적으로 입력된 것을 확인할 수 있습니다.


중복된 _id는 건너뛰고 나머지 넣기

만약 10개의 데이터가 있는데 _id가 중복된 데이터가 2개가 있다면 나머지 8개를 넣을 방법이 있을까요?

그래서 등장한 옵션이 ordered라는 옵션입니다. insert() 함수는 첫 번째 parameter는 데이터를, 두 번째 parameter는 옵션을 넣어줄 수 있습니다. 그럼 아래처럼 옵션을 넣어보겠습니다.

MongoDB> db.inspections.insert([{ "_id": 1, "test": 1 },{ "_id": 1, "test": 2 }, { "_id": 3, "test": 3 }],{ "ordered": false })

위에서 이미 _id값이 1인 데이터가 1개 들어가 있습니다. 그러고 나서 중복된 _id 2개와 새로운 _id 1개를 넣도록 하였으며 콤마(,)를 구분해서 두 번째 parameter에는 {"ordered":false} 라는 값을 넣어주었습니다. parameter 역시 JSON 형태에 맞게 넣어주어야 합니다.

 

결과는 1개의 데이터는 정상적으로 저장이 되었고 2개의 데이터는 오류가 난 것을 볼 수 있습니다. 즉 ordered 옵션을 넣지 않는다면 기본적으로 true라는 사실을 알 수 있습니다.


이번 포스팅에서는 MongoDB에서 데이터(document)를 넣을 때 값이 중복될 경우 사용하는 option에 대해서 알아보았습니다. insert() 함수의 두 번째 parameter에 ordered 옵션을 줄 수 있으며 기본값은 true가 된다는 사실입니다. 도움이 되셨으면 합니다. 이상입니다.

댓글