개요
배열 필드의 요소가 지정한 조건보다 큰지 확인하고 싶다면 MongoDB의 $gt 연산자를 활용할 수 있습니다. 이 글에서는 실제 예제를 따라 하며 샘플 컬렉션 생성부터 조건 비교 쿼리 작성까지 단계별로 살펴보겠습니다.
1. 샘플 컬렉션 만들기
먼저 문서가 담긴 컬렉션을 생성합니다. 아래 명령으로 arrayElementsNotGreaterThanDemo 컬렉션에 숫자 배열을 가진 문서 네 개를 삽입해 보겠습니다.
> db.arrayElementsNotGreaterThanDemo.insertOne({"Scores":[89,43,32,45]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd9e9f9b50a6c6dd317adb3")
}
> db.arrayElementsNotGreaterThanDemo.insertOne({"Scores":[32,33,34,40]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd9ea13b50a6c6dd317adb4")
}
> db.arrayElementsNotGreaterThanDemo.insertOne({"Scores":[45,56,66,69]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd9ea25b50a6c6dd317adb5")
}
> db.arrayElementsNotGreaterThanDemo.insertOne({"Scores":[46,66,77,88]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd9ea3cb50a6c6dd317adb6")
}2. 저장된 전체 문서 조회하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 손쉽게 확인할 수 있습니다.
> db.arrayElementsNotGreaterThanDemo.find().pretty();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{
"_id" : ObjectId("5cd9e9f9b50a6c6dd317adb3"),
"Scores" : [
89,
43,
32,
45
]
}
{
"_id" : ObjectId("5cd9ea13b50a6c6dd317adb4"),
"Scores" : [
32,
33,
34,
40
]
}
{
"_id" : ObjectId("5cd9ea25b50a6c6dd317adb5"),
"Scores" : [
45,
56,
66,
69
]
}
{
"_id" : ObjectId("5cd9ea3cb50a6c6dd317adb6"),
"Scores" : [
46,
66,
77,
88
]
}3. 조건보다 큰 배열 항목 조회하기
다음은 $gt 연산자를 사용해 지정한 값(45)보다 큰 요소를 가진 문서를 찾는 쿼리입니다.
> db.arrayElementsNotGreaterThanDemo.find({Scores: {$gt:45}});실행 결과는 아래와 같습니다.
{ "_id" : ObjectId("5cd9e9f9b50a6c6dd317adb3"), "Scores" : [ 89, 43, 32, 45 ] }
{ "_id" : ObjectId("5cd9ea25b50a6c6dd317adb5"), "Scores" : [ 45, 56, 66, 69 ] }
{ "_id" : ObjectId("5cd9ea3cb50a6c6dd317adb6"), "Scores" : [ 46, 66, 77, 88 ] }알아두면 좋은 점: $gt 연산자의 동작 방식
배열 필드에 $gt를 적용하면 배열 안의 요소 중 하나라도 조건을 충족하면 해당 문서가 반환됩니다. 위 결과에서 첫 번째 문서 [89, 43, 32, 45]가 포함된 이유도 89 하나가 45보다 크기 때문입니다.
반대로 모든 배열 요소가 특정 값보다 커야 하는 문서만 정확히 골라내고 싶다면 $not과 $elemMatch를 조합하는 방법이 효과적입니다.
> db.arrayElementsNotGreaterThanDemo.find({Scores: {$not: {$elemMatch: {$lte: 45}}}});이 쿼리는 45 이하인 요소가 하나도 없는 문서, 즉 모든 요소가 45보다 큰 문서만 반환합니다. 상황에 맞게 두 방식을 구분해서 사용하면 더욱 정확한 데이터 조회가 가능합니다.