MongoDB 내장 목록에서 $gt 연산자로 조건에 맞는 값 조회하기
MongoDB에서 내장된 배열(목록) 안의 필드 값이 특정 값보다 큰 문서를 찾으려면 find() 메서드와 함께 $gt(greater than, 초과) 연산자를 사용하면 됩니다. 먼저 예제에 사용할 컬렉션을 생성해 보겠습니다.
> db.demo317.insertOne(
... {'id':101,
... 'details':[{'Score':78,Name:"Chris"},
... {'Score':88,Name:"David"}
... ]
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e50e69cf8647eb59e562060")
}
> db.demo317.insertOne(
... {'id':102,
... 'details':[{'Score':90,Name:"Chris"},
... {'Score':91,Name:"David"}
... ]
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e50e6adf8647eb59e562061")
}컬렉션의 모든 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.demo317.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e50e69cf8647eb59e562060"), "id" : 101, "details" : [ { "Score" : 78, "Name" : "Chris" }, { "Score" : 88, "Name" : "David" } ] }
{ "_id" : ObjectId("5e50e6adf8647eb59e562061"), "id" : 102, "details" : [ { "Score" : 90, "Name" : "Chris" }, { "Score" : 91, "Name" : "David" } ] }$gt 연산자로 내장 목록의 값 필터링하기
내장 목록의 Score 값이 89보다 큰 레코드만 조회하려면 아래와 같이 점 표기법(dot notation)으로 details.Score 경로를 지정하고 $gt 조건을 적용합니다.
> db.demo317.find({"details.Score" :{"$gt": 89}});실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e50e6adf8647eb59e562061"), "id" : 102, "details" : [ { "Score" : 90, "Name" : "Chris" }, { "Score" : 91, "Name" : "David" } ] }결과를 보면 id가 101인 문서는 배열 내 어떤 Score 값도 89를 초과하지 않아 제외되었고, id가 102인 문서는 90과 91이라는 값이 조건을 충족하므로 반환되었습니다. MongoDB에서는 배열 내 요소 중 하나라도 조건을 만족하면 해당 문서 전체가 조회된다는 점을 기억해 두면 유용합니다.