👨💻
본인이 당연히 이해하는 지식을 다른 사람이 이해하지 못한다고 하더라도 관용적인 태도를 가지고 천천히 설명해주는 사람이 있는 반면
왜 도대체 그렇게 기본적인 사실도 모르냐며 나무라는 사람이 있다
그런 사람들의 말 속에는 상대를 멍청하다고 생각하며 무시하고 업신여기는 감정이 들어있다
오히려 그런 유형의 사람들이 더 멍청하다 정서적 지능이 낮기 때문이다
본인이 본인 스스로에게 멍청하다고 말하는것 같아 웃음이 났다
앞으로도 열심히 사셨으면 좋겠다
NoSQL은 매우 넓은 범위에서 사용하는 용어로, 관계형 테이블의 레거시한 방법을 사용하지 않는 데이터 저장소를 말한다.
비구조적인 대용량의 데이터를 저장하는 경우
클라우드 컴퓨팅 및 저장공간을 최대한 활용하는 경우
빠르게 서비스를 구축하고 데이터 구조를 자주 업데이트 하는 경우
brew install mongosh
(atlas 만드는방법은 따로 적지 않았지만 클라우드를 만들었고 atlas에서 제공하는 sample data를 받아왔다)
mongosh "mongodb+srv://cluster0.`여기는 블로그 올려서 가려줌니다`.mongodb.net/myFirstDatabase" --apiVersion 1 --username `여기에 atlas에서 사용하는 username들어감`
그럼이제 터미널에서 mongodb에 접속되었다
show dbs
use 내가 사용하고자하는 database이름
***collections(mongoDB의 document 집합, document는 로컬에서 JSON형식으로 전달한 하나의 데이터 세트 단위임, document는 고유한 id값을 가진 JSON의 객체 형식으로 이루어져 있음)
show collections
📭
우리는 zips라는 collection으로 들어가보자
여기에는 미국의 우편번호 관련 데이터가 저장되어 있다
🇺🇸
California 주의 우편번호 관련 데이터를 조회
해보자
이때 find명령어
가 들어간다
db.collection_name.find(<쿼리문>)
의 형식에 따라 데이터 조회(READ)를 위해 아래와 같이 적어주자
db.zips.find({"state" : "CA"})
{
_id: ObjectId("5c8eccc1caa187d17ca6f360"),
city: 'LOS ANGELES',
zip: '90004',
loc: { y: 34.076163, x: 118.302863 },
pop: 64062,
state: 'CA'
},
{
_id: ObjectId("5c8eccc1caa187d17ca6f361"),
city: 'LOS ANGELES',
zip: '90001',
loc: { y: 33.973093, x: 118.247896 },
pop: 51841,
state: 'CA'
},
{
_id: ObjectId("5c8eccc1caa187d17ca6f362"),
city: 'LOS ANGELES',
zip: '90005',
loc: { y: 34.058508, x: 118.301197 },
pop: 35864,
state: 'CA'
},
{
_id: ObjectId("5c8eccc1caa187d17ca6f363"),
city: 'LOS ANGELES',
zip: '90007',
loc: { y: 34.029442, x: 118.287095 },
pop: 46985,
state: 'CA'
},
{
_id: ObjectId("5c8eccc1caa187d17ca6f364"),
city: 'LOS ANGELES',
zip: '90010',
loc: { y: 34.060633, x: 118.302664 },
pop: 5335,
state: 'CA'
}
...more
그러면 이렇게 JSON형식으로 출력 됨
🌴 우편번호 90004가 반갑다
이때 find명령어에 따른 실제 결과물은 화면에 출력된 것보다 훨씬 많지만 화면에는 랜덤하게 20개만 출력된다
db.zips.find({"state" : "CA", "city" : "LOS ANGELES"})
db.zips.find()
db.zips.find().count()
db.zips.findOne({_id: ObjectId("5c8eccc1caa187d17ca6f360")})
updateMany
: 쿼리문과 일치하는 모든 도큐먼트를 업데이트
updateOne
: 주어진 기준에 맞는 다수의 도큐먼트 중 첫번째 도큐먼트 하나만 업데이트
위에서 본 데이터에서 pop은 인구 수를 얘기한다(population)
$inc
$inc연산자를 통해 특정 필드의 값을 원하는 만큼 증가시킬 수 있다 나는 10을 적어줌으로써 LOS ANGELES의 pop필드값을 10만큼 증가시켜 줬다
db.zips.updateMany({"city" : "LOS ANGELES", {"$inc" : {"pop" : 10}}})
Atlas atlas-eh18gl-shard-0 [primary] sample_training> db.zips.updateMany({"city" : "LOS ANGELES"}, {"$inc" : {"pop" : 10}})
{
acknowledged: true,
insertedId: null,
matchedCount: 56,
modifiedCount: 56,
upsertedCount: 0
}
matchedCount : 조건에 맞는 LOS ANGELES가 56개 있었고
modifiedCount : 56개의 데이터를 모두 수정함
$set
updateOne을 써서도 데이터를 바꿀 수 있다(이때는 $set을 사용함, $inc를 사용하면 +- 계산을 해줘야하기 때문임 $set은 그냥 원하는 값을 바로 넣어줌)
Atlas atlas-eh18gl-shard-0 [primary] sample_training> db.zips.updateOne({"zip" : "90004"}, {"$set" : {"pop" : 50000}})
{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}
Atlas atlas-eh18gl-shard-0 [primary] sample_training> db.zips.findOne({_id: ObjectId("5c8eccc1caa187d17ca6f360")})
{
_id: ObjectId("5c8eccc1caa187d17ca6f360"),
city: 'LOS ANGELES',
zip: '90004',
loc: { y: 34.076163, x: 118.302863 },
pop: 50000,
state: 'CA'
}
pop부분 보면 바뀐 것을 확인가능
$push
$push 연산자는 간단하게 말하자면, 배열로 이루어진 필드의 값에 요소를 추가하기 위한 연산자다.
Atlas atlas-eh18gl-shard-0 [primary] sample_training> db.grades.updateOne({"student_id" : 250, "class_id" : 339}, {"$push" : {"scores" : {"type" : "extra credit", "score" : 100}}})
{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}
Atlas atlas-eh18gl-shard-0 [primary] sample_training> db.grades.find({"student_id" : 250})
[
{
_id: ObjectId("56d5f7eb604eb380b0d8e292"),
student_id: 250,
scores: [
{ type: 'exam', score: 3.6641013617826124 },
{ type: 'quiz', score: 16.099760154050923 },
{ type: 'homework', score: 18.069138737846245 },
{ type: 'homework', score: 66.16407292421133 },
{ type: 'extra credit', score: 100 }
],
class_id: 339
},
...more
scores의 필드 값인 배열에 type: 'extra credit' 요소가 추가된 것을 확인할 수 있다
document를 삭제하는 방법
deleteMany
: 쿼리문과 일치하는 모든 도큐먼트를 삭제
deleteOne
: 주어진 기준에 맞는 다수의 도큐먼트 중 첫번째 도큐먼트 하나를 삭제
db.collection_name.drop()
터미널에서 작업을 다 완료하고 mongodb서버에서 나갈려면 터미널에
exit쳐주면 됨