DB/MongoDB 정리

MongoDB 튜토리얼 2. CRUD

100win10 2019. 9. 17. 11:01

검색


db.컬렉션이름.find()



검색 조건 역시 문서 형식으로 표현


 ','로 분류시 문서내의 키 값 쌍들은 and연산으로 처리 된다.


표현 : {<키> :{$eq: <값>}}


$eq, $lt, $lte, $gt, $gte, $ne


ex ) db.myCol.find({"age":{$eq:50}})


eq은 많이 쓰는 표현이므로 {<키>:<값>} 형식 가능



논리 연산자를 사용한 복합 조건 표현


// AND 연산


and 연산을 직접 쓸수도 있다


db.컬렉션.find({$and:[ <조건> , <조건2> ] })


db.mycol.find(

{

$and: [

{key1: value1}, {key2: value2}

]

   }

).pretty();


즉 2가지 형태로 가능



db.myCol.find({"age":10, "grade":"A"});


db.myCol.find({$and: [ {"age":10}, {"grade" : "A"}] });


// OR 연산


db.컬렉션.find($or: [ <조건1>, <조건2> ] })


db.mycol.find({ $or: [{"by"":"tutorials point"}, { 어쩌구 }] });



섞일 경우


A and B ( B안에 or )


db.mycol.find("lies" : {$gt:10}, $or: [{"by" : "tutorials point"}, {"title": "MongoDB Overview"}]}).pretty();



10살 ~ 20살 사이


db.myCol.find({$and : [{"age" : {$git:10}}, {"age": {$lt:20}} ] });


축약 => db.myCol.find({"age":{$gt:10, $lt:20}})



db.myCol.find({"age": {$gt:10}, "age":{$lt:20}}) // 잘못된 표현 , 조건에 쓰인 필드가 같다. 이름이라 생각해보고 equal 로 생각해보자


name이 10이면서 20인것은 있을수가 없음



OR 역시 마찬가지



db.myCol.find({$or: [{"age" : 10}, {"grade" : "A"}] })


=> db.myCol.find({ $or : [{"age": 10}, {"age": 20}] })


db.myCol.find({"age" : {$in: [10,20]} }) // 도 가능


// AND OR 혼합


db.myCol.find({ "grade" : "A", $or : [{"age":10}, {"age":20}] });



집합 연산자를 사용한 복합 조건 표현


//$in 연산자


위에 참조


//$nin 연산자 


db.myCol.find({"age" : {$nin: [10,20]} })



//$all 연산자 ( 단 , 필드 값이 배열인 경우만 유효하다)


db.myCol.find({"hobby" : {$all : ["soccer", "baseball"]} }) // 축구하고 야구가 취미힌 학생을 찾아라



// 기타 연산자


db.myCol.find({"age": {$exists:false}}) // age필드 없는 문서 검색

db.myCol.find({"age":null}) // age 필드 없는 문서 검색


db.myCol.find(("age": {$exists:true}}) // age 필드 있는 문서 검색

db.myCol.find({"age": {$ne:null}}) // age 필드 있는 문서 검색 



프로젝션


db.컬렉션명.find(<조건>, <프로젝션>)


// select <프로젝션> from 컬렉션명 where <조건>


프로젝션은 문서필드 즉 = {필드명:값...}



"_id" 필드 표시하지 않으려면 ? : 


db.myCol.find({"city" : "suwon"} , {"_id":0, "name":1}).pretty()


1을 넣으면 그 필드만 보겠다. 


0을 넣으면 그 필드 빼고 다 보겠다.


조건이 없는경우

=>db.myCol.find({} ,, {"_id":0, "name":1}).pretty()



insert 하고 find 위주 다음주 시험





몽고DB는 업데이트시 문서 하나만 업데이트 한다.


여러 문서 업데이트시 multi를 붙여준다.



몽고DB overview가 여러개 나올시 여러개 다 바꿔주어라.



save 메소드는 기본적으로 대체 ( replace ) 이다.


단일 문서 수정


db.컬렉션명.update(<조건>, <수정내용>)

db.컬렉션명.updateOne(<조건>,<수정내용>)

<수정내용> ={ $set{필드명:값} } 

> db.myCol.update( {"name": "kim"}, {$set:{"age":21}})

   age 21없을시 넣어준다. 

  name 없을시 오류


복수 문서 수정


db.컬렉션명.update(<조건>, <수정내용>, {multi:true})

db.컬렉션명.updateMany(<조건>, <수정내용>)


조건에 맞는 문서가 없을시 upsert 속성이 트루라면 수정내용에 있는 내용을 가지고 문서를 만들어서 insert까지 하라


db.컬렉션명.update(<조건>,<수정내용>,{upsert:true})



Thre remove() method


db.collections.remove({'title':'MongoDB Overview'})



하나만 지지울때

db.컬렉션이름.remove(DELETION_CRITERIA,1)

다 지울때

db.컬렉션이름.remove({})



db.myCol.remove({"age":20}) // 복수의 문서 삭제

db.myCOl.remove({"age":20}, {justOne: true} ) // 첫째만 

db.myCOl.remove({"age":20}, 1) // 첫째만