데이터베이스/MongoDB

배열 연습 문제

haventmetyou 2023. 12. 15. 16:06

 

1. 첫 번째 과목이 수학이고, 점수가 85보다 큰 학생 찾기

db.class.find({grades:{$elemMatch:{subject:'수학', score:{$gt:85}}}}).pretty()
db.class.find({'grades.subject': "수학", 'grades.score': {$gte : 85}})

{
  _id: 1,
  name: '반장',
  grades: [
    {
      subject: '수학',
      score: 88
    },
    {
      subject: '과학',
      score: 90
    }
  ]
}
{
  _id: 2,
  name: '부반장',
  grades: [
    {
      subject: '수학',
      score: 88
    },
    {
      subject: '과학',
      score: 90
    }
  ]
}

 

2. 두 번째 과목에서 과학 점수가 90점 이상인 학생 찾기

db.class.find({grades:{$elemMatch:{subject:'과학', score:{$gte:90}}}}).pretty()
db.class.find({"grades.subject": "과학", "grades.score": {$gte : 90}})

{
  _id: 1,
  name: '반장',
  grades: [
    {
      subject: '수학',
      score: 88
    },
    {
      subject: '과학',
      score: 90
    }
  ]
}
{
  _id: 2,
  name: '부반장',
  grades: [
    {
      subject: '수학',
      score: 88
    },
    {
      subject: '과학',
      score: 90
    }
  ]
}
{
  _id: 3,
  name: '서기',
  grades: [
    {
      subject: '수학',
      score: 85
    },
    {
      subject: '과학',
      score: 100
    }
  ]
}

 

 

3. 수학 성적이 88점인 학생과 과학 성적이 100점인 학생 모두 찾기

db.class.find({$or: [{grades:{$elemMatch:{subject:'수학', score:88}}}, {grades:{$elemMatch:{subject:'과학', score:100}}}]})
db.class.find({$or: [{'grades.subject': '수학', 'grades.score': 88}, {'grades.subject':'과학', 'grades.score':100}]})
{
  _id: 1,
  name: '반장',
  grades: [
    {
      subject: '수학',
      score: 88
    },
    {
      subject: '과학',
      score: 90
    }
  ]
}
{
  _id: 2,
  name: '부반장',
  grades: [
    {
      subject: '수학',
      score: 88
    },
    {
      subject: '과학',
      score: 90
    }
  ]
}
{
  _id: 3,
  name: '서기',
  grades: [
    {
      subject: '수학',
      score: 85
    },
    {
      subject: '과학',
      score: 100
    }
  ]
}

 

4. 모든 성적에서 90점 이상을 받은 학생 찾기

db.class.find({$and: [{'grades.0.score': {$gte: 90}}, {'grades.1.score': {$gte: 90}}]})

 

5. 성적 배열에서 첫 번째 성적이 90점 미만이고, 두 번째 성적이 95점 이상인 학생 찾기

db.class.find({$and: [{'grades.0.score': {$lt: 90}}, {'grades.1.score': {$gte: 95}}]})

{
  _id: 3,
  name: '서기',
  grades: [
    {
      subject: '수학',
      score: 85
    },
    {
      subject: '과학',
      score: 100
    }
  ]
}

 

 

 

6. 전자기기 태그가 있는 모든 제품 찾기

db.product.find({tags: '전자기기'})

 

7. 스토리지 사양이 256GB인 제품 찾기

db.product.find({'specifications.name': '스토리지', 'specifications.value':'256GB'})

{
  _id: 2,
  product: '스마트폰',
  tags: [
    '전자기기',
    '통신기기',
    '휴대용'
  ],
  specifications: [
    {
      name: 'CPU',
      value: 'Snapdragon 888'
    },
    {
      name: '메모리',
      value: '8GB'
    },
    {
      name: '스토리지',
      value: '256GB'
    }
  ]
}

 

8. 휴대용 태그를 가지고 있으면서 메모리 사양이 16GB 이상인 제품 찾기

 

9. 태그 배열에 컴퓨터와 휴대용이 모두 포함된 제품 찾기

db.product.find({$and:[{tags:'컴퓨터'}, {tags:'휴대용'}]})

{
  _id: 1,
  product: '노트북',
  tags: [
    '전자기기',
    '컴퓨터',
    '휴대용'
  ],
  specifications: [
    {
      name: 'CPU',
      value: 'Intel i7'
    },
    {
      name: '메모리',
      value: '16GB'
    },
    {
      name: '스토리지',
      value: '512GB SSD'
    }
  ]
}

 

10. 스토리지 사양이 SSD인 제품 찾기

db.product.find({specifications:
                    {$elemMatch:
                        {name: "스토리지",
                         value: {$regex: "SSD"}}}
})

{
  _id: 1,
  product: '노트북',
  tags: [
    '전자기기',
    '컴퓨터',
    '휴대용'
  ],
  specifications: [
    {
      name: 'CPU',
      value: 'Intel i7'
    },
    {
      name: '메모리',
      value: '16GB'
    },
    {
      name: '스토리지',
      value: '512GB SSD'
    }
  ]
}
{
  _id: 3,
  product: '데스크탑',
  tags: [
    '전자기기',
    '컴퓨터'
  ],
  specifications: [
    {
      name: 'CPU',
      value: 'AMD Ryzen 7'
    },
    {
      name: '메모리',
      value: '32GB'
    },
    {
      name: '스토리지',
      value: '1TB SSD'
    }
  ]
}