72

icCubeで MongoDB データ ソースを作成しようとしています。アイデアは、配列のサイズを新しいフィールドとして返すことです。何かのようなもの :

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

しかし、いくつかのレコードで次のエラーが発生しています:

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

フィールドが空であるか配列でない場合にサイズが0になる方法はありますか(エラーを取り除きます)?

4

3 に答える 3

137

$ifNullここで演算子を使用できます。フィールドが配列ではないか、指定されたエラーによって存在しないようです:

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

また、これらが存在するが配列ではない場合に備えて$type、を確認することもできます。$match

于 2014-06-13T08:50:49.657 に答える
0

別の解決策は、null を使用してドキュメントを削除することです。

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

また、'$' 参照 (ここでは "$myFieldArray") によって $size への引数として使用されるドキュメント フィールドも射影の一部である必要があります。

$project:
{ 
 "people": 1,
 "myFieldArray":1,
 "Count myFieldArray" : {$size : "$myFieldArray" }
}
于 2019-06-11T09:01:59.960 に答える