복붙노트

[MONGODB] MongoDB를이 - $ 크기에 대한 인수는 배열해야하지만 유형이었다 EòÒ / 실종

MONGODB

MongoDB를이 - $ 크기에 대한 인수는 배열해야하지만 유형이었다 EòÒ / 실종

icCube와 MongoDB의 데이터 소스를 만들려고. 아이디어는 새로운 분야로 배열의 크기를 반환하는 것입니다. 뭔가 같은 :

$project:
{ 
 "people": 1, 
 "Count myFieldArray" : {$size : "$myFieldArray" }
}

하지만 일부 레코드 다음과 같은 오류에 대한 받고 있어요 :

The argument to $size must be an Array, but was of type: EOO

방법은 필드가 배열 (오류를 제거하기가) 비어 있거나없는 경우 크기가 0이라고 있습니까?

해결법

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

    1.당신은 여기 $ IFNULL 연산자를 사용할 수 있습니다. 이 필드는 어느 주어진 오차로되지 배열 여부 존재 같다 :

    당신은 여기 $ IFNULL 연산자를 사용할 수 있습니다. 이 필드는 어느 주어진 오차로되지 배열 여부 존재 같다 :

    { "$project": {
        "people": 1,
        "Count": { 
            "$size": { "$ifNull": [ "$myFieldArray", [] ] }
        }
    }}
    

    또한이 경우에 대비하여 $ 매치에서 $ 유형이 할 일의 존재를 확인하고 싶지만 배열하지 않을 수 있습니다.

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

    2.대체 솔루션은 널 (null) 사용과 문서를 제거하는 것입니다

    대체 솔루션은 널 (null) 사용과 문서를 제거하는 것입니다

    $match: {myFieldArray: { $elemMatch: { $exists: true } }}
    

    또한, (여기서는 "$ myFieldArray") '$'참조 $ 크기 인수로서 사용되는 문서 필드는 돌출부의 일부이어야한다.

    $project:
    { 
     "people": 1,
     "myFieldArray":1,
     "Count myFieldArray" : {$size : "$myFieldArray" }
    }
    
  3. ==============================

    3.MongoDB를 3.2 및 최신에서, 당신은 당신의 분야가 $ 끝나면 IsArray와 평가에 필드를 반환하는 $ 콘드 연산자와 함께 배열이 있는지 확인하기 위해 $ 끝나면 IsArray을 사용할 수 있습니다 :

    MongoDB를 3.2 및 최신에서, 당신은 당신의 분야가 $ 끝나면 IsArray와 평가에 필드를 반환하는 $ 콘드 연산자와 함께 배열이 있는지 확인하기 위해 $ 끝나면 IsArray을 사용할 수 있습니다 :

    { "$project": {
        "people": 1,
        "myFieldArrayCount": { 
            "$size": { 
                "$cond": [ 
                    { "$isArray": "$myFieldArray" }, 
                    "$myFieldArray", 
                    []
                ]
            } 
        }
    }}
    
  4. from https://stackoverflow.com/questions/24201120/mongodb-the-argument-to-size-must-be-an-array-but-was-of-type-eoo-missing by cc-by-sa and MIT license