MongoDB 컬렉션 생성 및 문서 삽입
먼저 문서를 담고 있는 컬렉션을 생성해 보겠습니다.
> db.demo130.insertOne(
... {
... "PlayerDetails":[{Score:56},{Score:78},{Score:89},{Score:97}]
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3065bf68e7f832db1a7f6d")
}
> db.demo130.insertOne(
... {
... "PlayerDetails":[{Score:45},{Score:56}]
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3065c068e7f832db1a7f6e")
}
find() 메서드로 전체 문서 확인하기
find() 메서드를 사용하면 컬렉션의 모든 문서를 조회할 수 있습니다.
> db.demo130.find();
위 명령을 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e3065bf68e7f832db1a7f6d"), "PlayerDetails" : [ { "Score" : 56 }, { "Score" : 78 }, { "Score" : 89 }, { "Score" : 97 } ] }
{ "_id" : ObjectId("5e3065c068e7f832db1a7f6e"), "PlayerDetails" : [ { "Score" : 45 }, { "Score" : 56 } ] }
$eq와 $not 연산자로 조건에 맞는 문서 조회하기
다음은 특정 값을 가져오기 위한 쿼리입니다. $eq 연산자는 필드 값이 지정한 값과 정확히 일치하는지 검사하고, $not 연산자는 뒤따르는 조건식($gt: 56)의 논리적 부정을 수행하여 56보다 큰 점수가 하나라도 포함된 문서를 제외시킵니다.
> db.demo130.find({
... "PlayerDetails.Score": {
... "$eq": 56,
... "$not": { "$gt": 56}
... }
... })
이 쿼리는 다음과 같은 결과를 반환합니다.
{ "_id" : ObjectId("5e3065c068e7f832db1a7f6e"), "PlayerDetails" : [ { "Score" : 45 }, { "Score" : 56 } ] }
결과 분석
첫 번째 문서는 Score 값으로 78, 89, 97을 포함하고 있어 56보다 큰 값이 존재하므로 $not 조건에 해당되어 결과에서 제외되었습니다. 반면 두 번째 문서는 모든 Score가 56 이하이면서 정확히 56인 값을 가지고 있으므로 두 조건을 모두 만족하여 조회 결과에 포함됩니다.
이처럼 $eq와 $not 같은 비교 연산자를 조합하면 배열 내부의 중첩된 값까지 유연하게 필터링할 수 있습니다.