MongoDB에서 배열과 서브 도큐먼트 쿼리하기

YoungJoon Suh·2022년 4월 14일
0

MongoDB에서 배열과 서브 도큐먼트를 쿼리하는 방법
db.companies.find({"relationships.0.person.last_name" : "Zuckerberg" },
{ "name" : 1 }).pretty()
projection
0: 배열의 첫번째 요소의 위치
person: 중첩된 객체를 값으로 가지고 있는 필드
last_name: 서브 도큐먼트 person의 필드
"Zuckerberg" : 우리가 찾고 있는 값
{ "name" : 1 }: 결과에 name 필드만 포함하도록 Projection

Shell에서 각 도큐먼트에 있는 relationships 배열의 첫 번째 요소에서 last name이 Zuckerberg인 사람을 검색해 본다.
각 도큐먼트에서 relationships 배열의 첫번째 요소이며 이름이 Mark인 CEO를 찾는다면
db.companies.find({"relationships.0.person.first_name" : "Mark",
"relationships.0.title" : {"regex" : "CEO" }}, {"name" : 1 }).pretty() relationships 배열에서 이름이 Mark인 CEO가 몇 명인지 알아보자. last name을 first name으로 변경하고 Zuckerberg를 Mark로 변경합니다. 그런 다음 이 요소의 title에 CEO 문자열이 포함되는 조건을 추가한다. 정규식 연산자인 $regex를 사용하여 일치시키려는 문자열을 지정할 수 있습니다. MQL에서 Dot notation을 사용하여 서브 도큐먼트의 요소를 참조할 수 있습니다. 배열에서 Dot notation을 사용하려면 요소의 위치를 지정해야 합니다. Syntax db.collection.find({"field 1.lther field.also a field": "value"}) 특정 요소의 위치로 배열 필드를 쿼리하거나 서브 도큐먼트의 요소를 쿼리하기 위해서, MQL은 점 표기법을 사용하여 도큐먼트에서 이러한 요소의 주소를 지정합니다. 점 표기법을 사용하여 원하는 만큼 중첩된 도큐먼트로 이동할 수 있습니다. 배열에서 점 표기법을 사용하려면 요소의 위치를 지정해야 합니다. 제출 날짜가 "Oct 20 2020"또는 "Oct 21 2020"이고 module이 "Databases - MongoDB"가 아닌 submissions 컬렉션의 모든 도큐먼트를 반환하는 가장 간결한 쿼리를 고르세요. db.submissions.find( { "or": [ { "date": "Oct 20 2020" },
{ "date": "Oct 21 2020" }],
"sprint": { "ne": "Databases - MongoDB" }}).pretty()not은 논리식을 부정하기 때문에 이 경우 에러가 발생합니다.

모든 MQL 연산자에는 $ 접두사가 있습니다.
가 필드 이름 앞에 접두사로 사용되었을 때, 이는 필드에 저장된 값을 나타냅니다. 이것은 같은 도큐먼트 내에서 필드를 비교하는 표현식에 매우 유용합니다. $는 필드 이름이 아닌 필드의 값 자체를 가리킵니다. 필드에 추가적인 연산자 없이 배열로 나열될 때 MongoDB는 배열의 요소 순서와 정확히 일치하는 문서를 찾습니다. 배열의 순서와 상관없이 일치하는 amenities 요소들을 포함하는 모든 도큐먼트를 얻기 위해선 $all을 사용해야 합니다. 다음 쿼리 중 모든 임직원에 대한 정보가 저장된 employees 배열 필드에서 2050명의 임직원이 있는 회사의 이름만 companies 컬렉션에서 반환하는 것을 고르세요. db.companies.find({ "employees": { "size": 2050 } },
{ "name": 1, "_id": 0 })
회사의 이름만 결과로 얻어야 하고, _id를 명시적으로 제외하고 있기 때문에 정답입니다.
db.companies.find({ "employees": { "$size": 2050 } }, { "name": 1})
_id 값은 기본적으로 결과 커서에 포함된다.
같은 도큐먼트 안에서 두 가지 필드의 값을 비교할 때 $expr를 사용합니다. $expr를 사용할 땐, Aggregation 문법으로 비교 연산자를 사용합니다.

profile
저는 서영준 입니다.

0개의 댓글