복붙노트

[MONGODB] 그 배열 필드 주어진 배열의 적어도 N 개의 요소를 포함하는 문서를 찾을

MONGODB

그 배열 필드 주어진 배열의 적어도 N 개의 요소를 포함하는 문서를 찾을

그것은 제목의 말씀 기본적으로.

입력 : = myArray의 단어 배열

나는 필드가 모델이 배열 필드 wordsCollection.

나는 wordsCollections가 그 모델의 모든 문서를 찾을 수있는 방법에 myArray의 최소한 n 요소에서

해결법

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

    1.우리가 우리의 컬렉션에서 다음과 같은 문서가 있다고 가정하자 :

    우리가 우리의 컬렉션에서 다음과 같은 문서가 있다고 가정하자 :

    { "_id" : ObjectId("5759658e654456bf4a014d01"), "a" : [ 1, 3, 9, 2, 9, 0 ] }
    { "_id" : ObjectId("5759658e654456bf4a014d02"), "a" : [ 0, 8, 1 ] }
    { "_id" : ObjectId("5759658e654456bf4a014d03"), "a" : [ 0, 8, 432, 9, 34, -3 ] }
    { "_id" : ObjectId("5759658e654456bf4a014d04"), "a" : [ 0, 0, 4, 3, 2, 7 ] }
    

    다음 입력 배열 및 N = 2

    var inputArray = [1, 3, 0];
    

    우리는 배열 필드가 집계 프레임 워크를 사용하여 주어진 배열의 적어도 n 개의 요소를 포함하는 문서를 반환 할 수 있습니다.

    은 $ 일치를 선택 N에 배열의 길이보다 크거나 equals와 문서 만. 이것은 데이터의 양이 파이프 라인의 아래에서 처리 될 줄인다.

    은 $ 편집하다 파이프 라인 연산자를 사용하여 $ COND 운영자와의 특수 작전 $$ KEEP을 사용하여 논리 조건 처리는 논리적 조건이 조건이 거짓 문서 "폐기"에 true 또는 $$ PRUNE있는 문서를 "유지".

    우리의 경우, 조건은 우리가 $의 setIntersection 연산자를 사용을 계산 두 배열의 교차로의 $ 크기가 2보다 크거나 같은 경우 true를 반환 $ GTE입니다.

    db.collection.aggregate(
        [ 
            { "$match": { "a.1": { "$exists": true } } }, 
            { "$redact": { 
                "$cond": [ 
                    { "$gte": [ 
                        { "$size": { "$setIntersection": [ "$a", inputArray ] } }, 
                        2
                    ]},
                    "$$KEEP", 
                    "$$PRUNE" 
                ]
            }}
        ]
    )
    

    이는 생산 :

    { "_id" : ObjectId("5759658e654456bf4a014d01"), "a" : [ 1, 3, 9, 2, 9, 0 ] }
    { "_id" : ObjectId("5759658e654456bf4a014d02"), "a" : [ 0, 8, 1 ] }
    { "_id" : ObjectId("5759658e654456bf4a014d04"), "a" : [ 0, 0, 4, 3, 2, 7 ] }
    
  2. ==============================

    2.사용 집계.

    사용 집계.

    $ 일치 집계 파이프 라인에서는 $ 크기와 $ GTE을 사용할 수 있습니다

  3. from https://stackoverflow.com/questions/37725694/find-documents-whose-array-field-contains-at-least-n-elements-of-a-given-array by cc-by-sa and MIT license