MongoDB find query 사용해보기

dev-well-being·2023년 1월 3일
1
post-thumbnail

MongoDB를 검색할 때 RDB의 SQL의 WHERE 조건처럼 비슷한 기능을 제공하고 있어서 사용해 보았다.

아래 블로그를 많이 참조하였다.
[기본] MongoDB find query(몽고DB 검색)

1. 전선택 쿼리 : {}

구분몽고DB관계형
내용db.컬렉션.find({}) select * from collection


2. 매칭 쿼리 : {대상 : 값}

  • Object형식의 json 값인 경우
    • {'target.오브젝트(json)키' : 'A'} 또는 {target : {오브젝트(json)키 : 'A'}}
구분몽고DB관계형
내용db.컬렉션.find({target : 'A'}) select * from collection where target = 'A'


3. in 쿼리 : { 대상 : {$in : [값1, 값2]} }

구분몽고DB관계형
내용db.컬렉션.find({target : {$in : ['A', 'B']}}) select * from collection where target in ('A', 'B')


4. and 쿼리 : {대상1 : 값1, 대상2 : 값2}

구분몽고DB관계형
내용db.컬렉션.find({target : 'A', name : 'B'}) select * from collection where target = 'A' and name = 'B'


5. in 쿼리 : {$or : [ {대상1 : 값1}, {대상2 : 값2} ] }

구분몽고DB관계형
내용db.컬렉션.find({$or : [ {target : 'A'}, {name : 'B'} ] }) select * from collection where target = 'A' or name = 'B'


6. and와 or 조건을 사용

구분몽고DB관계형
db.컬렉션.find({$or : [ {target : 'A', name : 'BB'}, number : 3 ] }) select * from collection where (target = 'A' and name = 'BB') or number = 3
내용db.컬렉션.find({number : 3, $or : [ {target : 'A', name : 'BB'} ] }) select * from collection where number = 3 and (target = 'A' and name = 'BB')
db.컬렉션.find({number : 3, $or : [ {target : 'A'}, {name : 'BB'} ] }) select * from collection where number = 3 and (target = 'A' or name = 'BB')


7. 길이 : {대상1 : 값1, 대상2 : 값2}

구분몽고DB관계형
db.컬렉션.find({number : {$gt : 10}}) select * from collection where number < 10
크거나 같은db.컬렉션.find({number : {$gte : 10}}) select * from collection where number <= 10
작은db.컬렉션.find({number : {$lt : 10}}) select * from collection where number > 10
작거나 같은db.컬렉션.find({number : {$lte : 10}}) select * from collection where number >= 10
(배열) 같은db.컬렉션.find({이름 : {$size : 10}}) select * from collection where array.size = 10
(배열) 매치db.컬렉션.find({'이름.10' : {$exists : true}}) select * from collection where array.size = 10


8. like 쿼리 : {대상 : {$regex : 값} }

  • 배열이면서 Object형식의 json 값인 경우
    • elemMatch 연산자를 사용한 경우 : {array : {$elemMatch : { text : {$regex : 'abcd'}}}}
    • elemMatch 연산자를 사용안한 경우 : {'array.text' : { $regex : 'abcd' }}
구분몽고DB관계형
내용db.컬렉션.find({text : {$regex : 'abcd'} }) select * from collection where text like '%abcd%'


9. not 쿼리 : {대상 : {$ne : 값} }

구분몽고DB관계형
내용db.컬렉션.find({text : {$ne : 'abc'} }) select * from collection where text != 'abc'


10. (배열에서의 부정) not 쿼리 : {$nor: [ {대상1: 값1}, {대상2: 값2} ]}

구분몽고DB관계형
내용db.컬렉션.find({$nor: [ {name: 'abcd'}, {num: 7} ]}) select * from collection where name != 'abcd' and num != 7


11. 도큐먼트(Document)필드 존재여부(false는 부정) : {대상필드키 : {$exists : true} }

구분몽고DB관계형
내용db.컬렉션.find({text : {$exists : true} }) SELECT * FROM information_schema.COLUMNS where COLUMN_NAME = 'text'


12. is null : {대상 : null }

구분몽고DB관계형
내용db.컬렉션.find({text : null }) select * from collection where text is null


13. 조회결과 특정필드 선택: { 검색대상 : 조건값 }, { 필드1: 1, 필드2: 1 }

구분몽고DB관계형
내용db.컬렉션.find({ level : "A" }, { name: 1, num: 1 } )select _id, name, num from collection where level = 'A'

profile
안녕하세요!! 좋은 개발 문화를 위해 노력하는 dev-well-being 입니다.

0개의 댓글