복붙노트

[MONGODB] 배열 요소에 대한 여러 기준을 지정합니다

MONGODB

배열 요소에 대한 여러 기준을 지정합니다

나는 여기 MongoDB를위한 문서를 읽고있다 나는이 두 가지 명령과 그들 사이의 서로 다른 이해 할 수 없습니다입니다.

db.users.find( { finished: { $elemMatch: { $gt: 15, $lt: 20 } } } )

내 이해 : 적어도 하나의 요소 필요 함께 두 조건을 만족합니다.

db.users.find( { finished: { $gt: 15, $lt: 20 } } )

질문 : 배열 일이 어떻게 범위 일치에? 이 조건은 소진 및 다른 요소는 나머지 조건 즉 $ LT에 대한 확인이고, 15 : 20의 경우는 하나의 요소를 만족한다 $ 같다?

해결법

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

    1.문서가 먼저 배열 작품과 방법 범위 쿼리를 이해할 필요가 무슨 말을 이해합니다.

    문서가 먼저 배열 작품과 방법 범위 쿼리를 이해할 필요가 무슨 말을 이해합니다.

    당신이 컬렉션에 다음과 같은 문서가 있다고 가정 :

    { "finished" : [ 27, 3 ] },
    { "finished" : 17 }
    

    첫 번째 쿼리 :

    db.users.find( { "finished": { "$elemMatch": { "$gt": 15, "$lt": 20 } } } )
    

    전용 "완료"문서를 반환 배열입니다. $ elemMatch 연산자는 필드가 배열 어디 하나의 요소가 모든 쿼리 기준을 만족입니다 문서와 일치하기 때문이다.

    그러나 두 번째 쿼리 :

    db.users.find( { "finished": { "$gt": 15, "$lt": 20 } } )
    

    당신이 27으로 원하는 것은 이상 20 세이 때문에 27 일치하는 첫 번째 기준과 3 번째 적은 15보다 아마없는 두 문서를 반환합니다. 이 동작은 문서에서 언급 한 것입니다.

    배열까지 모든 쿼리 기준과 일치하는 배열의 하나 개 또는 여러 개의 요소로 일치에 대한 범위 쿼리합니다.

    배열 범위 쿼리를 사용하지 마십시오. 예기치 않은 결과를 얻을 것이다.

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

    2.우리가 우리의 컬렉션에서이 두 문서가 있다고 가정 :

    우리가 우리의 컬렉션에서이 두 문서가 있다고 가정 :

    {
            "_id" : ObjectId("57548c14da05625a928404fd"),
            "finished" : [16, 21]
    },
    {
            "_id" : ObjectId("57548c1bda05625a928404fe"),
            "finished" : [3, 36]
    }
    

    완성 된 배열 (16이 기준에 첫 번째 문서의 경기에서 분명히) 이상 15 미만 20 인 적어도 하나 개의 요소를 포함하는 경우 모든 문서를한다고 가정. 당신은 발행하는 경우 :

    db.users.find( { finished: { $gt: 15, $lt: 20 } } )
    

    대신 첫 번째 문서와 일치, 그것은 그들 모두 일치합니다. 왜?

    위의 쿼리의 문제는 필드 참조가 하나의 완성 된 요소로 제한되지 않는 것이 었습니다. 완성 된 요소 중 하나가 큰 그 (15)이고, 다른 하나는 덜 20보다이지만, 두 속성이 같은 완성 된 요소에 적용하는 당신이 원하는 것은 그래서,이 쿼리는 한 일치합니다. 요소 만족함의 조합 MongoDB를 문서의 기준 섹션은이 사실을 명시한 :

    일치하는 프로세스를 제한하기 위해, 당신은 $ elemMatch 연산자를 사용한다 :

    db.users.find( { finished: { $elemMatch: { $gt: 15, $lt: 20 } } } )
    
  3. from https://stackoverflow.com/questions/37646325/specify-multiple-criteria-for-array-elements by cc-by-sa and MIT license