[MONGODB] 어떻게 중첩 된 오브젝트를 조회하는?
MONGODB어떻게 중첩 된 오브젝트를 조회하는?
중첩 된 객체 표기법과 MongoDB를 쿼리 할 때 나는 문제가있다 :
db.messages.find( { headers : { From: "reservations@marriott.com" } } ).count()
0
db.messages.find( { 'headers.From': "reservations@marriott.com" } ).count()
5
나는 내가 잘못을하고있는 중이 야 무엇을 볼 수 없습니다. 나는 점 표기법 쿼리와 같은 결과를 반환하는 중첩 된 객체 표기법을 기대하고있다. 어디에서 잘못입니까?
해결법
-
==============================
1.db.messages.find ({헤더 : {에서 "reservations@marriott.com"}})
db.messages.find ({헤더 : {에서 "reservations@marriott.com"}})
헤더는 {에서 ...} 동일 문서에 대한이 쿼리, 즉 다른 필드가 포함되어 있지 않습니다.
db.messages.find ({ 'headers.From': "reservations@marriott.com"})
되지 않은 다른 필드에 의해 영향을받는 headers.From 필드에서이 단지 외모에 포함 된, 또는 헤더에서 누락.
도트 표기법 문서
-
==============================
2.다른 방법으로 두 개의 쿼리 메커니즘 작업 섹션의 하위 문서에서 문서의 제안 :
다른 방법으로 두 개의 쿼리 메커니즘 작업 섹션의 하위 문서에서 문서의 제안 :
필드가 포함 된 문서 (즉, 하위 문서)을 보유하는 경우, 당신도 하위 문서의 개별 필드에 대한 값을 지정, 점 표기법을 사용하여 하위 문서 "로 손"는 필드의 값, 또는 전체 하위 문서를 지정할 수 있습니다 :
하위 문서가 필드 순서를 포함하여 정확히 지정된 하위 문서를, 일치하는 경우 하위 문서를 선택 내에서 평등과 일치합니다.
다음 예에서 쿼리는 필드 생산자의 값이 값 'ABC123'과 정확한 순서로 값 '123 스트리트'와 필드 주소 만 필드 회사를 포함하는 하위 문서 모든 문서를 일치 :
db.inventory.find( { producer: { company: 'ABC123', address: '123 Street' } });
-
==============================
3.하위 문서에 쿼리 MongoDB를 수집에 대한 혼란이 많이 있기 때문에, 나는 예제와 함께 위의 답을 설명하는 그 가치를 생각 :
하위 문서에 쿼리 MongoDB를 수집에 대한 혼란이 많이 있기 때문에, 나는 예제와 함께 위의 답을 설명하는 그 가치를 생각 :
우선, 즉 컬렉션의 두 개체를 삽입 한 : 메시지로 :
> db.messages.find().pretty() { "_id" : ObjectId("5cce8e417d2e7b3fe9c93c32"), "headers" : { "From" : "reservations@marriott.com" } } { "_id" : ObjectId("5cce8eb97d2e7b3fe9c93c33"), "headers" : { "From" : "reservations@marriott.com", "To" : "kprasad.iitd@gmail.com" } } >
만 즉 다른 필드를 포함하지 않거나 우리는 필드의 값과 전체 하위 문서를 지정해야합니다 : 헤더 { "reservations@marriott.com"에서} 개체에 동일 곳은 문서에 대한이 쿼리를 변경할 수 없기 하나 여야합니다.
그래서 @ Edmondo1984에서 ANS에 따라
문 위의 쿼리 결과 아래이어야 무엇인가?
> db.messages.find({headers: {To: "kprasad.iitd@gmail.com", From: "reservations@marriott.com"} }).count() 0
그리고 우리는의 순서를 변경 할 경우 시작 및 끝 즉 두 번째 문서의 하위 문서로 같은?
> db.messages.find({headers: {From: "reservations@marriott.com", To: "kprasad.iitd@gmail.com"} }).count() 1
도트 연산자를 사용하여, 나는이 모든 일에 대해 매우 분명하다 생각합니다. 의 쿼리 아래의 결과를 보자 :
> db.messages.find( { 'headers.From': "reservations@marriott.com" } ).count() 2
예를 들어이 설명은 하위 문서로 찾기 쿼리에 누군가가 더 선명도를 만들 것입니다 바랍니다.
from https://stackoverflow.com/questions/16002659/how-to-query-nested-objects by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 방법 MongoDB를 가진 하위 필터링 배열 [중복] (0) | 2019.11.29 |
---|---|
[MONGODB] MongoDB를 - 업데이트 문서의 배열에 객체 (중첩 된 업데이트) (0) | 2019.11.29 |
[MONGODB] 어레이 크기가 1보다 큰 문서를 질의 (0) | 2019.11.29 |
[MONGODB] 이 개 필드를 비교에 MongoDB의 쿼리 조건 (0) | 2019.11.29 |
[MONGODB] MongoDB의에서 임의의 기록 (0) | 2019.11.29 |