MongoDB에서 배열 요소 쿼리하기
MongoDB는 배열 필드에 저장된 데이터를 다룰 때 특히 강력한 성능을 발휘합니다. 배열 요소를 쿼리하려면 다음과 같은 기본 문법을 사용하면 됩니다.
db.yourCollectionName.find({yourArrayFieldName:"yourValue"}).pretty();위 문법은 배열 필드 안에 지정한 값("yourValue")이 포함된 모든 도큐먼트를 반환합니다.
예제 컬렉션 생성하기
개념을 이해하기 위해 먼저 도큐먼트가 포함된 컬렉션을 생성해 보겠습니다. 아래 쿼리를 사용하면 됩니다.
> db.queryArrayElementsDemo.insertOne({
"StudentName":"John","StudentFavouriteSubject":["C","Java"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c90c0354afe5c1d2279d694")
}
> db.queryArrayElementsDemo.insertOne({ "StudentName":"Carol","StudentFavouriteSubject":["C","C++"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c90c0434afe5c1d2279d695")
}
> db.queryArrayElementsDemo.insertOne({ "StudentName":"David","StudentFavouriteSubject":["MongoDB","Java"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c90c0584afe5c1d2279d696")
}저장된 전체 도큐먼트 확인하기
find() 메서드를 사용하면 컬렉션의 모든 도큐먼트를 확인할 수 있습니다.
> db.queryArrayElementsDemo.find().pretty();
실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5c90c0354afe5c1d2279d694"),
"StudentName" : "John",
"StudentFavouriteSubject" : [
"C",
"Java"
]
}
{
"_id" : ObjectId("5c90c0434afe5c1d2279d695"),
"StudentName" : "Carol",
"StudentFavouriteSubject" : [
"C",
"C++"
]
}
{
"_id" : ObjectId("5c90c0584afe5c1d2279d696"),
"StudentName" : "David",
"StudentFavouriteSubject" : [
"MongoDB",
"Java"
]
}배열 요소 조건으로 쿼리 실행하기
이제 특정 값이 배열에 포함되어 있는지 조건으로 검색해 보겠습니다. 예를 들어, 좋아하는 과목 목록에 "Java"가 포함된 학생만 조회하려면 다음과 같이 작성합니다.
> db.queryArrayElementsDemo.find({StudentFavouriteSubject:"Java"}).pretty();실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5c90c0354afe5c1d2279d694"),
"StudentName" : "John",
"StudentFavouriteSubject" : [
"C",
"Java"
]
}
{
"_id" : ObjectId("5c90c0584afe5c1d2279d696"),
"StudentName" : "David",
"StudentFavouriteSubject" : [
"MongoDB",
"Java"
]
}출력 결과를 보면, 위 쿼리는 StudentFavouriteSubject 배열에 "Java"라는 값을 포함하고 있는 모든 도큐먼트(John과 David)를 정확히 반환한 것을 확인할 수 있습니다. 이처럼 MongoDB에서는 별도의 연산자 없이도 필드 이름과 값을 지정하는 것만으로 배열 내부의 요소를 손쉽게 검색할 수 있습니다.