MongoDB에서는 $elemMatch 셀렉터를 사용해서 배열 내 요소이 특정 조건을 만족하는 쿼리를 작성할 수 있다.
이 때, $elemMatch로 걸린 조건을 배열 내 하나의 요소라도 만족하면 해당 조건을 가져오게 되는데
다음과 같은 과제가 주어졌을 때에는 어떻게 쿼리를 짜야할 지 모를 수 있다.
배열 안의 모든 요소가 3 ~ 6 사이인 document만 가져와라.
db.test.insertMany([
{item: "ABC", ratings: [2, 9], category_id: 10},
{item: "XYZ", ratings: [4, 3], category_id: 10},
{item: "ABC", ratings: [9], category_id: 20},
{item: "ABC", ratings: [9, 10], category_id: 30},
{item: "ABC", ratings: [2, 4], category_id: 30},
{ item: "ABD", ratings: [1, 2, 5], category_id: 10 },
{ item: "XPZ", ratings: [5, 9, 4, 3], category_id: 10 },
{ item: "AAC", ratings: [1, 9], category_id: 20 },
{ item: "AGC", ratings: [42, 9, 10], category_id: 30 },
{ item: "AHC", ratings: [3, 2, 4], category_id: 30 },
])
이럴 땐 $not과 $and를 사용해서 쿼리를 작성할 수 있다.
db.survey.find({
$and: [
{
ratings: {
$not: {
$elemMatch: { $lt: 3 },
},
},
},
{
ratings: {
$not: {
$elemMatch: { $gt: 6 },
},
},
},
],
});
$elemMatch가 배열 내 요소가 하나라도 만족을 하면 true가 되기 때문에
3보다 작은 요소가 하나라도 있거나, 6보다 큰 요소가 하나라도 있으면 거르는 쿼리이다.
'Database > MongoDB' 카테고리의 다른 글
MongoDB의 Failover (0) | 2023.11.19 |
---|---|
MongoDB 로그 관리 : logRotate와 로그파일 권한 (1) | 2023.11.16 |
MongoDB는 1 Petabyte를 저장할 수 있을까? (0) | 2023.08.26 |
[MongoDB] MongoDB 빌드하기 (2) | 2023.03.05 |
mongoexport, mongoimport 사용해보기 (0) | 2022.08.05 |