Dev_from the Bottom

#28. MongoDB_04 : 데이터 검색/다중 데이터 입력/배열 검색 본문

Database

#28. MongoDB_04 : 데이터 검색/다중 데이터 입력/배열 검색

고무라면 2022. 5. 31. 08:59

1. 모든 데이터 조회(전체)

# 모든 데이터 조회
db.col2.find()

 

2. 다중 데이터 입력 : 배열 포함

db.col2.insertMany([{name:"홍길동2", age:500, etc:[{hobby:"달리기", state:"충청도2"}, {likenum:[1,2,3,4,5]}]},
{name:"핑크퐁", age:5, etc:[{hobby:"마술", state:"서울"}, {likenum:[10,20,30,40,50]}]},
{name:"뽀로로", age:5, etc:[{hobby:"여행", state:"경기"}, {likenum:[20,30,40,50, 60]}]}
])

>>>
{ acknowledged: true,
  insertedIds: 
   { '0': ObjectId("629554873a5bcee96d63bdc2"),   # objectId가 3개 생김
     '1': ObjectId("629554873a5bcee96d63bdc3"),
     '2': ObjectId("629554873a5bcee96d63bdc4") } }

 

3. 다양한 조건 하에 조회

# 홍길동만 조회
db.col2.find({name:"홍길동"})

>>>
{ _id: ObjectId("629553f63a5bcee96d63bdc1"),
  name: '홍길동',
  age: 500,
  etc: 
   [ { hobby: '육상', state: '충청도' },
     { likenum: [ 1, 2, 3, 4, 5 ] } ] }

# 조회 조건 여러개
db.col2.find({name:"뽀로로", age : 5})   # 컴마로 구분

>>>
{ _id: ObjectId("629554873a5bcee96d63bdc4"),
  name: '뽀로로',
  age: 5,
  etc: 
   [ { hobby: '여행', state: '경기' },
     { likenum: [ 20, 30, 40, 50, 60 ] } ] }

# age : 5 -> 뽀로로, 핑크퐁 두개 결과 출력
db.col2.find({age : 5})

>>>
{ _id: ObjectId("629554873a5bcee96d63bdc3"),
  name: '핑크퐁',
  age: 5,
  etc: 
   [ { hobby: '마술', state: '서울' },
     { likenum: [ 10, 20, 30, 40, 50 ] } ] }
{ _id: ObjectId("629554873a5bcee96d63bdc4"),
  name: '뽀로로',
  age: 5,
  etc: 
   [ { hobby: '여행', state: '경기' },
     { likenum: [ 20, 30, 40, 50, 60 ] } ] }

# findOne() : 맨 먼저 데이터 하나만 출력

>>>
db.col2.findOne({age : 5})
{ _id: ObjectId("629554873a5bcee96d63bdc3"),
  name: '핑크퐁',
  age: 5,
  etc: 
   [ { hobby: '마술', state: '서울' },
     { likenum: [ 10, 20, 30, 40, 50 ] } ] }
     
# 특정 필드는 안나오게 : 아이디 안나오게
# {_id:0} : 아이디는 출력 안되게
db.col2.find({age : 5}, {_id:0})

>>>
{ name: '핑크퐁',
  age: 5,
  etc: 
   [ { hobby: '마술', state: '서울' },
     { likenum: [ 10, 20, 30, 40, 50 ] } ] }
{ name: '뽀로로',
  age: 5,
  etc: 
   [ { hobby: '여행', state: '경기' },
     { likenum: [ 20, 30, 40, 50, 60 ] } ] }

# 아이디만 출력 : 추가 옵션 개념
db.col2.find({age : 5}, {_id:1})

>>>
{ _id: ObjectId("629554873a5bcee96d63bdc3") }
{ _id: ObjectId("629554873a5bcee96d63bdc4") }

 

3. 배열 검색

  • elemMatch : 필드명이 같은 것을 찾아줌
db.col2.find({etc:{$elemMatch:{"likenum.0":20}}}) # 첫번째 요소(0)이 20

>>>
{ _id: ObjectId("629554873a5bcee96d63bdc4"),
  name: '뽀로로',
  age: 5,
  etc: 
   [ { hobby: '여행', state: '경기' },
     { likenum: [ 20, 30, 40, 50, 60 ] } ] }

# 두번째 요소가 20인거 찾기
db.col2.find({etc:{$elemMatch:{"likenum.1":20}}})

>>>
{ _id: ObjectId("629554873a5bcee96d63bdc3"),
  name: '핑크퐁',
  age: 5,
  etc: 
   [ { hobby: '마술', state: '서울' },
     { likenum: [ 10, 20, 30, 40, 50 ] } ] }

# 취미가 육상인 사람 찾기
db.col2.find({etc:{$elemMatch:{"hobby":"육상"}}})

>>>
{ _id: ObjectId("629553f63a5bcee96d63bdc1"),
  name: '홍길동',
  age: 500,
  etc: 
   [ { hobby: '육상', state: '충청도' },
     { likenum: [ 1, 2, 3, 4, 5 ] } ] }

 

# 참고

  • https://www.youtube.com/watch?v=PT44sq-x0yc&list=PLrqBTipDm9KSdW77bHEpdUQNWBjZGsW1d&index=4
  • https://cionman.tistory.com/48?category=758474
  • 몽고DB 완벽 가이드 3판(크리스티나 초도로 등 2명, 한빛미디어)

Comments