mongosh "mongodb+srv://cluster0.cr8dvwh.mongodb.net/myFirstDatabase" --apiVersion 1 --username <username>
아래의 단어들을 잘 기억하자.
도큐먼트
필드
값
컬렉션 : MongoDB의 도큐먼트로 구성된 저장소
JSON은 항상 활용하는 도큐먼트 형식이므로 제약사항을 잘 알아둬야 한다.
아래의 제약중 하나라도 충족되지 않으면 유효한 JSON이 안된다.
1. {} 중괄호로 시작하고 끝난다.
2. 필드와 값이 콜론으로 분리되고, 데이터셋은 쉼표로 구분한다.
3. 문자열인 필드도 쌍따옴표로 "" 감싸야 한다.
BSON은 문자열 형식인 JSON을 바이너리로 변환한 것
효율적이고, 가볍고, 다양한 자료형을 표현 가능하다.
몽고DB는 내부적으로 BSON으로 데이터를 저장하고 있다.
JSON 형식으로 입, 출력
mongoexport --uri "mongodb+srv://cluster0.cr8dvwh.mongodb.net/sample_airbnb" --username snowDelver --collections=listingsAndReviews --out=listingsAndReviews.json
BSON 형식으로 입, 출력
mongodump --uri "mongodb+srv://cluster0.cr8dvwh.mongodb.net/sample_airbnb" --username snowDelver
모든 도큐먼트는 (지정하지 않으면 자동으로 생성되는)_id 필드로 구분된다.
내부의 필드, 값이 모두 동일하더라도 _id가 다르면 다른 도큐먼트다.
존재하지 않는 collection에 insert시 해당 컬렉션이 자동으로 생성된다.
다중 insert를 할때, 오류 발생시 다음 insert 수행 여부를 지정하는 ordered
옵션이 있다.
특별히 어려운 내용은 없다.
db.collection.find({findKey:findVal})
db.collection.findOne({findKey:findVal})
db.collection.find({findKey:findVal}).count()
여러개의 값을 업데이트 할 때 $inc
와 같은 연산자가 필수
db.collection.updateMany(
{"city":"ALPINE"},
{"$inc":{"pop":10}}
)
배열형 데이터에 필드를 푸쉬할 때 $push
존재하지 않는 배열에 푸쉬하면 자동으로 배열 필드를 생성한다.
db.grades.updateOne(
{"student_id": 250, "class_id": 339 },
{ "$push": { "scores": { "type": "extra credit", "score": 100 } } }
);
scores를 잘못 입력한 score 필드 삭제할때 $unset
db.grades.update(
{ "student_id": 250, "class_id": 339 },
{ "$unset": { "score": 1 } }
);
find와 거의 동일하게 활용한다.
컬렉션을 삭제할때는 drop()
메서드를 호출한다.
db.collection.delete({"key":"val"});
db.collection.deleteMany({"key":"val"});
db.collection.drop();
일반적인 비교연산자들 활용한다.
$eq
,$gt
, $gte
$ne
, $lt
, $let
기본값은 $eq
연산자 이다.
db.trips.find({
"tripduration":{"$lte":70},
"usertype":{"$ne":"Subscriber"}
})
$and
,$or
,$nor
,$not
기본값은 $and
연산자 이다.
$not
을 제외하고 피연산자로 배열을 받는다.
복잡한 다중 논리연산자 적용예시
ICN에서 출발하거나 도착하는 CR2 및 A81비행기를 찾을때
($or
이 두번 활용되므로 $and
연산자를 삽입해줘야 한다.
db.flight.find({
"$and":[{"$or":[{dst_airpot:"ICN"}, {src_airpot:"ICN"}]},
{"$or":[{airplane:"CR2"}, {airplane:"A81"}]}
]
});