MongoDB에서 특정 값을 포함하는 배열이 있는 문서 찾기
MongoDB에서는 find() 메서드를 사용하여 배열 필드에 특정 값이 포함된 문서를 아주 간단하게 조회할 수 있습니다. 기본 문법은 다음과 같습니다.
db.yourCollectionName.find({"yourArrayFieldName":"yourValue"},.......N).pretty();
위 문법을 제대로 이해하기 위해 실제로 컬렉션을 생성하고 문서를 삽입해 보겠습니다. 다음 쿼리를 사용하면 컬렉션에 문서를 추가할 수 있습니다.
>db.findSpecificValue.insertOne({"StudentId":1,"StudentName":"Larry","FavouriteSubject":["C","C++","Java"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c6e8996140577d89182b8d0")
}
>db.findSpecificValue.insertOne({"StudentId":2,"StudentName":"Larry","FavouriteSubject":["MongoDB","MySQL","SQL Server"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c6e89b1140577d89182b8d1")
}
find() 메서드를 사용해 컬렉션에 저장된 모든 문서를 화면에 출력해 보겠습니다. 실행 쿼리는 다음과 같습니다.
> db.findSpecificValue.find().pretty();
실행 결과는 아래와 같습니다.
{
"_id" : ObjectId("5c6e8996140577d89182b8d0"),
"StudentId" : 1,
"StudentName" : "Larry",
"FavouriteSubject" : [
"C",
"C++",
"Java"
]
}
{
"_id" : ObjectId("5c6e89b1140577d89182b8d1"),
"StudentId" : 2,
"StudentName" : "Larry",
"FavouriteSubject" : [
"MongoDB",
"MySQL",
"SQL Server"
]
}
이제 FavouriteSubject 배열에 "MongoDB"라는 특정 값이 포함된 문서를 찾는 쿼리를 실행해 보겠습니다.
> db.findSpecificValue.find({"FavouriteSubject":"MongoDB"}).pretty();
다음은 위 쿼리의 실행 결과입니다.
{
"_id" : ObjectId("5c6e89b1140577d89182b8d1"),
"StudentId" : 2,
"StudentName" : "Larry",
"FavouriteSubject" : [
"MongoDB",
"MySQL",
"SQL Server"
]
}
핵심 정리
MongoDB에서 배열 필드를 검색할 때는 별도의 특수 연산자 없이 {"배열필드명": "값"} 형태의 조건만으로 충분합니다. MongoDB는 배열의 요소 중 하나라도 지정한 값과 일치하면 해당 문서를 결과에 포함시키기 때문에, 배열 데이터 검색이 매우 직관적입니다. 이 방식은 학생 관리 시스템처럼 한 문서에 여러 개의 태그나 카테고리를 저장한 경우 원하는 항목을 빠르게 필터링할 때 특히 유용합니다.