복붙노트

[MONGODB] 어떻게 중첩 된 오브젝트를 조회하는?

MONGODB

어떻게 중첩 된 오브젝트를 조회하는?

중첩 된 객체 표기법과 MongoDB를 쿼리 할 때 나는 문제가있다 :

db.messages.find( { headers : { From: "reservations@marriott.com" } } ).count()
0
db.messages.find( { 'headers.From': "reservations@marriott.com" }  ).count()
5

나는 내가 잘못을하고있는 중이 야 무엇을 볼 수 없습니다. 나는 점 표기법 쿼리와 같은 결과를 반환하는 중첩 된 객체 표기법을 기대하고있다. 어디에서 잘못입니까?

해결법

  1. ==============================

    1.db.messages.find ({헤더 : {에서 "reservations@marriott.com"}})

    db.messages.find ({헤더 : {에서 "reservations@marriott.com"}})

    헤더는 {에서 ...} 동일 문서에 대한이 쿼리, 즉 다른 필드가 포함되어 있지 않습니다.

    db.messages.find ({ 'headers.From': "reservations@marriott.com"})

    되지 않은 다른 필드에 의해 영향을받는 headers.From 필드에서이 단지 외모에 포함 된, 또는 헤더에서 누락.

    도트 표기법 문서

  2. ==============================

    2.다른 방법으로 두 개의 쿼리 메커니즘 작업 섹션의 하위 문서에서 문서의 제안 :

    다른 방법으로 두 개의 쿼리 메커니즘 작업 섹션의 하위 문서에서 문서의 제안 :

    필드가 포함 된 문서 (즉, 하위 문서)을 보유하는 경우, 당신도 하위 문서의 개별 필드에 대한 값을 지정, 점 표기법을 사용하여 하위 문서 "로 손"는 필드의 값, 또는 전체 하위 문서를 지정할 수 있습니다 :

    하위 문서가 필드 순서를 포함하여 정확히 지정된 하위 문서를, 일치하는 경우 하위 문서를 선택 내에서 평등과 일치합니다.

    다음 예에서 쿼리는 필드 생산자의 값이 값 'ABC123'과 정확한 순서로 값 '123 스트리트'와 필드 주소 만 필드 회사를 포함하는 하위 문서 모든 문서를 일치 :

    db.inventory.find( {
        producer: {
            company: 'ABC123',
            address: '123 Street'
        }
    });
    
  3. ==============================

    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
    

    예를 들어이 설명은 하위 문서로 찾기 쿼리에 누군가가 더 선명도를 만들 것입니다 바랍니다.

  4. from https://stackoverflow.com/questions/16002659/how-to-query-nested-objects by cc-by-sa and MIT license