[MongoDB] Embedded Document, 배열, 객체 검색 쿼리 정리
MongoDB에서 복잡한 구조의 데이터를 검색할 때,
Embedded Document, 배열(Array), 일반 객체에 따라 쿼리 방법이 조금씩 다릅니다.
각 케이스에 맞는 검색 방법을 정리합니다.
Embedded Documents 검색 ($elemMatch)
Embedded Document는
➔ 하나의 필드 안에 또 다른 객체 형태로 데이터를 저장하는 구조입니다.
**$elemMatch**를 사용하여, 배열 안의 문서 중 특정 조건을 만족하는 문서를 검색할 수 있습니다.
예시 데이터
{
"user": "kim",
"hobbies": [
{ "name": "soccer", "level": "beginner" },
{ "name": "coding", "level": "advanced" }
]
}
조건: name이 "coding"이고 level이 "advanced"인 hobby 찾기
db.collection.find({
hobbies: {
$elemMatch: {
name: "coding",
level: "advanced"
}
}
})
일반 배열 검색 ($all, $size)
$all : 배열에 여러 값이 모두 포함되어 있는지 검색
{
"tags": ["red", "blue", "green"]
}
조건: "red"와 "green" 모두 포함된 문서 찾기
db.collection.find({
tags: { $all: ["red", "green"] }
})
tags 배열에 "red"와 "green" 둘 다 존재해야 함
$size : 배열의 길이가 특정 개수와 일치하는 문서 찾기
db.collection.find({
tags: { $size: 3 }
})
tags 배열의 요소가 정확히 3개인 문서만 조회
일반 객체 검색 (Dot Notation)
Embedded 객체의 내부 속성에 접근해서 검색할 때는
**점(.) 표기법(Dot Notation)**을 사용합니다.
단, 필드 이름에 점이 들어가는 경우에는 반드시 따옴표로 감싸야 합니다.
{
"profile": {
"email": "test@example.com",
"phone": "010-1234-5678"
}
}
조건: email이 "test@example.com"인 문서 찾기
db.collection.find({
"profile.email": "test@example.com"
})
참고 사항
- $elemMatch는 배열 안의 단일 요소에 여러 조건을 동시에 걸 때 유용
- $all은 배열이 특정 값을 모두 포함해야 하는지 확인할 때 사용
- Dot Notation은 중첩 객체 탐색에 기본적으로 쓰이는 기법
- 쿼리 최적화를 위해 인덱스 설정이 필요할 수도 있음
참조 블로그:
Documents - Database Manual v8.0 - MongoDB Docs
MongoDB stores data records as BSON documents. BSON is a binary representation of JSON documents, though it contains more data types than JSON. For the BSON spec, see bsonspec.org. See also BSON Types.MongoDB stores records as documents for deployments hos
www.mongodb.com
[MONGO] 📚 Embedded / 배열 / 객체 검색 쿼리
Embedded Documents 검색 embedded Document란 auther Field처럼 Document 안 배열 형태로 있는 Document 를 말한다. $elemMatch $elemMatch는 조건이 배열 안의 요소와 일치하는 필드를 선택합니다. db.book.find({ "auther":{ $ele
inpa.tistory.com