객체 배열(array of objects)을 검색하려면 MongoDB의 find() 메서드를 사용하면 됩니다. find() 메서드는 컬렉션 또는 뷰에서 조건에 맞는 문서를 선택하고, 선택된 문서에 대한 커서(cursor)를 반환합니다.
1. 샘플 컬렉션 생성
먼저 객체 배열이 포함된 문서로 컬렉션을 만들어 보겠습니다.
> db.demo484.insertOne(
... { 'id' : 1, 'details' : [ { 'Name1' : 'Chris' }, { 'Name2' : 'David' }, { 'Name3' : 'Bob' } ] }
... );
{ "acknowledged" : true, "insertedId" : ObjectId("5e82e3a4b0f3fa88e22790a1") }
> db.demo484.insertOne(
... { 'id' : 1, 'details' : [ { 'Name1' : 'Chris' }, { 'Name2' : 'Carol' }, { 'Name3' : 'Bob' } ] }
... );
{ "acknowledged" : true, "insertedId" : ObjectId("5e82e3a4b0f3fa88e22790a2") }
> db.demo484.insertOne(
... { 'id' : 1, 'details' : [ { 'Name1' : 'Chris' }, { 'Name2' : 'Carol' }, { 'Name3' : 'Mike' } ] }
... );
{ "acknowledged" : true, "insertedId" : ObjectId("5e82e3a4b0f3fa88e22790a3") }
2. 전체 문서 조회
find() 메서드를 사용하면 컬렉션의 모든 문서를 확인할 수 있습니다.
> db.demo484.find();
실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e82e3a4b0f3fa88e22790a1"), "id" : 1, "details" : [ { "Name1" : "Chris" }, { "Name2" : "David" }, { "Name3" : "Bob" } ] }
{ "_id" : ObjectId("5e82e3a4b0f3fa88e22790a2"), "id" : 1, "details" : [ { "Name1" : "Chris" }, { "Name2" : "Carol" }, { "Name3" : "Bob" } ] }
{ "_id" : ObjectId("5e82e3a4b0f3fa88e22790a3"), "id" : 1, "details" : [ { "Name1" : "Chris" }, { "Name2" : "Carol" }, { "Name3" : "Mike" } ] }
3. 객체 배열 검색 쿼리 작성
다음은 MongoDB 컬렉션에서 객체 배열을 검색하는 쿼리입니다. $or 연산자를 사용해 여러 조건을 하나의 쿼리로 묶었습니다.
> db.demo484.find(
... {$or: [
... {'details.Name2': 'Carol', 'details.Name3': 'Mike'},
... {'details.Name2': 'Carol', 'details.Name3': 'Bob'}
... ]}
... )
이 쿼리는 details 배열 내 객체에서 Name2 값이 'Carol'이고, Name3 값이 'Mike' 또는 'Bob'인 문서만 골라냅니다. 실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e82e3a4b0f3fa88e22790a2"), "id" : 1, "details" : [ { "Name1" : "Chris" }, { "Name2" : "Carol" }, { "Name3" : "Bob" } ] }
{ "_id" : ObjectId("5e82e3a4b0f3fa88e22790a3"), "id" : 1, "details" : [ { "Name1" : "Chris" }, { "Name2" : "Carol" }, { "Name3" : "Mike" } ] }
핵심 정리
- 점 표기법(dot notation) – 'details.Name2'처럼 작성하면 배열 내부 객체의 특정 필드에 직접 접근할 수 있습니다.
- $or 연산자 – 여러 조건 중 하나라도 일치하는 문서를 모두 반환합니다.
- find() 메서드 – 조건에 맞는 문서를 선택하고, 결과에 대한 커서를 반환합니다.