[DB] MongoDB CRUD
CREATE
- 새로운 도큐먼트를 추가할 때
_id
값에 임의적으로 고유한 값을 생성해서 사용할 수도 있지만 보통은 ObjectId 타입(12byte, 24char)의 값으로 사용
*각 도큐먼트는 고유한 _id
값을 가지고 있어야 함
_id
필드와 값을 특정하지 않았다면, 자동적으로 _id
필드가 생성되고 값에 ObjectId 타입이 할당
- 존재하지 않는 컬렉션에 도큐먼트를 넣는 경우, 그와 동시에 컬렉션이 만들어지게 됨
1. 과정
mongo shell을 사용하여 컬렉션에 새로운 도큐먼트 추가하기
- 터미널을 사용해 아틀라스 클러스터에 연결하고, MongoDB에서 제공하는 샘플 데이터를 받아옴
- 사용하려는 데이터베이스로 이동후 컬렉션 확인
*show dbs
> use database
> show collections
으로 컬렉션 확인
- 작성된 도큐먼트 확인
{
"_id":ObjectId("5c8ecccqcaa187d17ca6ed16"),
"city":"ALPINE",
"zip":"35014",
"loc":{
"y":33.331165,
"x":86.208934
},
"pop":3062,
"state":"AL"
}
- 해당 도큐먼트를 MongoDB 샘플 데이터베이스 중 하나인 zips 컬렉션에 삽입
*db.zips.insert({})
2. insert()
응답 : WriteResult
nInserted
: 삽입된 도큐먼트의 수를 의미
*0일 경우 삽입 실패를 의미
writeError
: 삽입 실패시 해당 원인 출력
- insert를 이용하여 도큐먼트를 삽입 하기 위해서는 shell에 작성된 것과 같이
insert( )
의 괄호 안에 삽입하고자 하는 도큐먼트를 json 형식으로 작성
*shell에 작성된 것에서 _id
는 삭제 : 기본 값으로 ObjectId를 생성하여 할당
- 명령어에 따른 결과물이 하단에
WriteResult
로 출력
- 다수의 도큐먼트를 삽입시 배열 안에 삽입하고자 하는 객체들을 담아줌
*db.collection_name.insert([{}, {}])
- 기본적으로 인덱스 순서대로 작업을 진행해 duplicate key 에러가 나오는 순간 작업은 중단되지만 ordered 옵션을 사용하면 순서에 상관없이 고유한 _id를 가지는 모든 도큐먼트는 컬렉션에 추가됨
*db.collection_name.insert([{}, {}], {"ordered":false})
READ
1. 과정
- 터미널로 아틀라스 클러스터에 접속
- 미리 받아둔 MongoDB에서 샘플로 제공하는 데이터베이스 리스트를 터미널에서 확인
- 사용하려는 데이터베이스로 이동후 컬렉션 확인
*show dbs
> use database
> show collections
- 컬렉션 중 zips라고 되어 있는 컬렉션에서 데이터를 읽어보기
*db.zips.find({})
2. find()
db.collection_name.find({})
- {} 안에는 찾고자 하는 조건을 json 형식의 쿼리문으로 작성
- find 명령어를 조건 쿼리문 없이 사용하면 해당 데이터베이스의 모든 데이터를 조회
*db.collection_name.find()
- 결과물 : JSON 형식으로 화면에 출력
*화면에는 실제 결과물이 모두 출력되는 것이 아닌, 랜덤하게 선택된 총 20개 결과물만 출력
- 해당 조건에 맞는 다음 20개의 도큐먼트를 조회하기 위해서는 iterate의 줄임말인
it
명령어를 사용
1) pretty()
- 도큐먼트의 구조와 각 필드, 값의 쌍을 조금 더 읽기 편하게 출력하려면
pretty()
사용
*db.collection_name.find().pretty()
2) count()
- 데이터의 수를 조회하기 위해서는
count()
명령어 사용
*db.collection_name.find().count()
3. findOne()
db.collection_name.findOne({})
- 도큐먼트를 구별하는 고유한 값인
_id
를 조건을 주어 데이터를 특정할 수 있음
- 조건 쿼리문을 작성하지 않은 상태의 findOne()을 사용하면 무작위의 데이터 1개만 가져올 수도 있음
*db.collection_name.findOne()
UPDATE
응답
matchedCount
: 첫번째 인자로 들어간 조건을 충족하는 도큐먼트의 수
modifiedCount
: 업데이트 연산자로 인해 수정된 도큐먼트의 수
1. updateOne()
- 주어진 기준에 맞는 다수의 도큐먼트 중 첫번째 도큐먼트 하나만 업데이트
db.collection_name.updateOne({}, {})
- 첫번째 인자는 어떤 도큐먼트를 업데이트 할지 결정하는 쿼리문이 작성
- 두번째 인자는 발생할 업데이트 내용을 특정
2. updateMany()
- 쿼리문과 일치하는 모든 도큐멘트를 업데이트
db.collection_name.updateMany({}, {})
- 첫번째 인자는 어떤 도큐먼트를 업데이트 할지 결정하는 쿼리문이 작성
- 두번째 인자는 발생할 업데이트 내용을 특정
3. 업데이트 연산자
1) $set
$set
연산자를 사용하면 주어진 필드에 지정된 값을 업데이트할 수 있음
db.collection_name.updateOne({"zip":"12534"}, {"$set":{"pop":6235}})
// {“zip”: “12534”}에 해당하는 도큐먼트의 pop 필드가 지정한 값인 6235로 변경
2) $inc
$inc
연산자를 사용하면 특정 필드의 값을 원하는 만큼 증가시킬 수 있음
db.collection_name.updateMany({"city":"ALPINE"}, {"$inc":{"pop":10}})
// city가 ALPINE인 모든 도큐먼트의 pop 필드를 10만큼 씩 증가시킴
3) $push
- 배열로 이루어진 필드의 값에 요소를 추가하기 위한 연산자
db.collection_name.updateOne({"student_id":250, "class_id":339},
{"push":{"scores":{"type":"extra credit", "score":100}}})
// {"student_id":250, "class_id":339} : 업데이트할 도큐먼트 조건
// "scores" : 서브 도큐먼트를 삽입할 배열 타입의 값을 가지고 있는 필드
// {"type":"extra credit", "score":100} : 추가할 서브 도큐먼트
DELETE
1. DELETE 도큐먼트
응답
acknowledged
: 삭제된 경우 true
deletedCount
: 삭제된 항목의 수
1) deleteOne()
- 주어진 기준에 맞는 다수의 도큐먼트 중 첫번째 도큐먼트 하나를 삭제
_id
값으로 쿼리해 온 도큐먼트를 삭제하는 것이 좋은 접근법
- 만약
_id
값으로 쿼리를 하지 않는다면, 검색 쿼리문에 다양한 도큐먼트가 적합할 수 있기 때문
db.collection_name.deleteOne({})
2) deleteMany()
- 쿼리문과 일치하는 모든 도큐먼트를 삭제
db.collection_name.deleteMany({})
2. DELETE 컬렉션
응답
- Boolean : 삭제된 경우 true
1) drop()
- 컬렉션을 삭제하기 위해서는 drop이라는 명령어를 사용
db.collection_name.drop()
Author And Source
이 문제에 관하여([DB] MongoDB CRUD), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@sominpark/DB-MongoDB의-비교-연산자-종류
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
_id
값에 임의적으로 고유한 값을 생성해서 사용할 수도 있지만 보통은 ObjectId 타입(12byte, 24char)의 값으로 사용*각 도큐먼트는 고유한
_id
값을 가지고 있어야 함_id
필드와 값을 특정하지 않았다면, 자동적으로 _id
필드가 생성되고 값에 ObjectId 타입이 할당mongo shell을 사용하여 컬렉션에 새로운 도큐먼트 추가하기
*
show dbs
> use database
> show collections
으로 컬렉션 확인{
"_id":ObjectId("5c8ecccqcaa187d17ca6ed16"),
"city":"ALPINE",
"zip":"35014",
"loc":{
"y":33.331165,
"x":86.208934
},
"pop":3062,
"state":"AL"
}
*
db.zips.insert({})
응답 : WriteResult
nInserted
: 삽입된 도큐먼트의 수를 의미
*0일 경우 삽입 실패를 의미writeError
: 삽입 실패시 해당 원인 출력
insert( )
의 괄호 안에 삽입하고자 하는 도큐먼트를 json 형식으로 작성*shell에 작성된 것에서
_id
는 삭제 : 기본 값으로 ObjectId를 생성하여 할당WriteResult
로 출력*
db.collection_name.insert([{}, {}])
*
db.collection_name.insert([{}, {}], {"ordered":false})
1. 과정
- 터미널로 아틀라스 클러스터에 접속
- 미리 받아둔 MongoDB에서 샘플로 제공하는 데이터베이스 리스트를 터미널에서 확인
- 사용하려는 데이터베이스로 이동후 컬렉션 확인
*show dbs
>use database
>show collections
- 컬렉션 중 zips라고 되어 있는 컬렉션에서 데이터를 읽어보기
*db.zips.find({})
2. find()
db.collection_name.find({})
- {} 안에는 찾고자 하는 조건을 json 형식의 쿼리문으로 작성
- find 명령어를 조건 쿼리문 없이 사용하면 해당 데이터베이스의 모든 데이터를 조회
*db.collection_name.find()
- 결과물 : JSON 형식으로 화면에 출력
*화면에는 실제 결과물이 모두 출력되는 것이 아닌, 랜덤하게 선택된 총 20개 결과물만 출력 - 해당 조건에 맞는 다음 20개의 도큐먼트를 조회하기 위해서는 iterate의 줄임말인
it
명령어를 사용
1) pretty()
- 도큐먼트의 구조와 각 필드, 값의 쌍을 조금 더 읽기 편하게 출력하려면
pretty()
사용
*db.collection_name.find().pretty()
2) count()
- 데이터의 수를 조회하기 위해서는
count()
명령어 사용
*db.collection_name.find().count()
3. findOne()
db.collection_name.findOne({})
- 도큐먼트를 구별하는 고유한 값인
_id
를 조건을 주어 데이터를 특정할 수 있음 - 조건 쿼리문을 작성하지 않은 상태의 findOne()을 사용하면 무작위의 데이터 1개만 가져올 수도 있음
*db.collection_name.findOne()
UPDATE
응답
matchedCount
: 첫번째 인자로 들어간 조건을 충족하는 도큐먼트의 수
modifiedCount
: 업데이트 연산자로 인해 수정된 도큐먼트의 수
1. updateOne()
- 주어진 기준에 맞는 다수의 도큐먼트 중 첫번째 도큐먼트 하나만 업데이트
db.collection_name.updateOne({}, {})
- 첫번째 인자는 어떤 도큐먼트를 업데이트 할지 결정하는 쿼리문이 작성
- 두번째 인자는 발생할 업데이트 내용을 특정
2. updateMany()
- 쿼리문과 일치하는 모든 도큐멘트를 업데이트
db.collection_name.updateMany({}, {})
- 첫번째 인자는 어떤 도큐먼트를 업데이트 할지 결정하는 쿼리문이 작성
- 두번째 인자는 발생할 업데이트 내용을 특정
3. 업데이트 연산자
1) $set
$set
연산자를 사용하면 주어진 필드에 지정된 값을 업데이트할 수 있음
db.collection_name.updateOne({"zip":"12534"}, {"$set":{"pop":6235}})
// {“zip”: “12534”}에 해당하는 도큐먼트의 pop 필드가 지정한 값인 6235로 변경
2) $inc
$inc
연산자를 사용하면 특정 필드의 값을 원하는 만큼 증가시킬 수 있음
db.collection_name.updateMany({"city":"ALPINE"}, {"$inc":{"pop":10}})
// city가 ALPINE인 모든 도큐먼트의 pop 필드를 10만큼 씩 증가시킴
3) $push
- 배열로 이루어진 필드의 값에 요소를 추가하기 위한 연산자
db.collection_name.updateOne({"student_id":250, "class_id":339},
{"push":{"scores":{"type":"extra credit", "score":100}}})
// {"student_id":250, "class_id":339} : 업데이트할 도큐먼트 조건
// "scores" : 서브 도큐먼트를 삽입할 배열 타입의 값을 가지고 있는 필드
// {"type":"extra credit", "score":100} : 추가할 서브 도큐먼트
DELETE
1. DELETE 도큐먼트
응답
acknowledged
: 삭제된 경우 true
deletedCount
: 삭제된 항목의 수
1) deleteOne()
- 주어진 기준에 맞는 다수의 도큐먼트 중 첫번째 도큐먼트 하나를 삭제
_id
값으로 쿼리해 온 도큐먼트를 삭제하는 것이 좋은 접근법
- 만약
_id
값으로 쿼리를 하지 않는다면, 검색 쿼리문에 다양한 도큐먼트가 적합할 수 있기 때문
db.collection_name.deleteOne({})
2) deleteMany()
- 쿼리문과 일치하는 모든 도큐먼트를 삭제
db.collection_name.deleteMany({})
2. DELETE 컬렉션
응답
- Boolean : 삭제된 경우 true
1) drop()
- 컬렉션을 삭제하기 위해서는 drop이라는 명령어를 사용
db.collection_name.drop()
Author And Source
이 문제에 관하여([DB] MongoDB CRUD), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@sominpark/DB-MongoDB의-비교-연산자-종류
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
응답
matchedCount
: 첫번째 인자로 들어간 조건을 충족하는 도큐먼트의 수modifiedCount
: 업데이트 연산자로 인해 수정된 도큐먼트의 수
db.collection_name.updateOne({}, {})
db.collection_name.updateMany({}, {})
$set
연산자를 사용하면 주어진 필드에 지정된 값을 업데이트할 수 있음db.collection_name.updateOne({"zip":"12534"}, {"$set":{"pop":6235}})
// {“zip”: “12534”}에 해당하는 도큐먼트의 pop 필드가 지정한 값인 6235로 변경
$inc
연산자를 사용하면 특정 필드의 값을 원하는 만큼 증가시킬 수 있음db.collection_name.updateMany({"city":"ALPINE"}, {"$inc":{"pop":10}})
// city가 ALPINE인 모든 도큐먼트의 pop 필드를 10만큼 씩 증가시킴
db.collection_name.updateOne({"student_id":250, "class_id":339},
{"push":{"scores":{"type":"extra credit", "score":100}}})
// {"student_id":250, "class_id":339} : 업데이트할 도큐먼트 조건
// "scores" : 서브 도큐먼트를 삽입할 배열 타입의 값을 가지고 있는 필드
// {"type":"extra credit", "score":100} : 추가할 서브 도큐먼트
1. DELETE 도큐먼트
응답
acknowledged
: 삭제된 경우 truedeletedCount
: 삭제된 항목의 수
1) deleteOne()
- 주어진 기준에 맞는 다수의 도큐먼트 중 첫번째 도큐먼트 하나를 삭제
_id
값으로 쿼리해 온 도큐먼트를 삭제하는 것이 좋은 접근법
- 만약
_id
값으로 쿼리를 하지 않는다면, 검색 쿼리문에 다양한 도큐먼트가 적합할 수 있기 때문
db.collection_name.deleteOne({})
2) deleteMany()
- 쿼리문과 일치하는 모든 도큐먼트를 삭제
db.collection_name.deleteMany({})
2. DELETE 컬렉션
응답
- Boolean : 삭제된 경우 true
1) drop()
- 컬렉션을 삭제하기 위해서는 drop이라는 명령어를 사용
db.collection_name.drop()
Author And Source
이 문제에 관하여([DB] MongoDB CRUD), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sominpark/DB-MongoDB의-비교-연산자-종류저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)