MongoDBでは、$anyElementTrue
集計パイプライン演算子は、配列をセットとして評価し、true
を返します。 要素のいずれかがtrue
の場合 。
どの要素もtrue
でない場合 、次にfalse
を返します 。
配列の要素はtrue
false
でない場合 、null
、0
、またはundefined
。
例
次のドキュメントを含むコレクションがあるとします。
{ "_id" : 1, "data" : [ 1, 2, 3 ] }
このドキュメントには配列が含まれています。
$anyElementTrue
を使用して次のクエリを実行できます 配列にtrue
と評価される要素が含まれているかどうかを確認します :
db.test.aggregate(
[
{ $project: {
_id: 0,
anyElementTrue: { $anyElementTrue: [ "$data" ] } }
}
]
)
結果:
{ "anyElementTrue" : true }
この場合、すべての配列要素はtrue
と評価されます (つまり、false
ではありません 、null
、0
、またはundefined
)、したがって、true
の結果が得られます 。
真の要素がない場合
次のドキュメントをコレクションに追加しましょう:
{ "_id" : 2, "data" : [ false, undefined, 0, null ] }
そして、$anyElementTrue
を実行してみましょう その文書に対して:
db.test.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
anyElementTrue: { $anyElementTrue: [ "$data" ] } }
}
]
)
結果:
{ "anyElementTrue" : false }
ここでわかるように、$anyElementTrue
false
と評価されます 配列にfalse
が含まれている場合 、null
、0
、またはundefined
値。
配列にTrueとFalseの両方が含まれている場合
次のドキュメントをコレクションに追加しましょう:
{ "_id" : 3, "data" : [ true, false ] }
そして、$anyElementTrue
を実行してみましょう その文書に対して:
db.test.aggregate(
[
{ $match: { _id: 3 } },
{ $project: {
_id: 0,
anyElementTrue: { $anyElementTrue: [ "$data" ] } }
}
]
)
結果:
{ "anyElementTrue" : true }
true
を取得します 、false
である別の要素がある場合でも 。 $anyElementTrue
であるため、これは予想されることです。 true
を返します true
である要素が少なくとも1つあるときはいつでも 、他の要素の数に関係なく、falseです。
空のアレイ
空の配列はtrue
を返します 。
コレクションに次のドキュメントを追加するとします。
{ "_id" : 4, "data" : [ ] }
このドキュメントには空の配列が含まれています。
それでは、$anyElementTrue
を実行してみましょう。 もう一度:
db.test.aggregate(
[
{ $match: { _id: 4 } },
{ $project: {
_id: 0,
anyElementTrue: { $anyElementTrue: [ "$data" ] } }
}
]
)
結果:
{ "anyElementTrue" : false }
false
を返します 、空の配列はfalse
ではないため 。
ネストされた配列
$anyElementTrue
演算子はしません ネストされた配列に降ります。配列をトップレベルで評価します。
したがって、ネストされた配列にtrue
の要素が含まれているかどうか またはfalse
$anyElementTrue
とは無関係です 。 $anyElementTrue
まで 懸念されるのは、ネストされた配列が要素であるため、true
。
私が何を意味するかを示すために、次のドキュメントを挿入するとします。
{ "_id" : 5, "data" : [ false, [ false ] ] } { "_id" : 6, "data" : [ false, false ] }
それでは、$anyElementTrue
を実行してみましょう。 これらの2つのドキュメントに対して:
db.test.aggregate(
[
{ $match: {_id: { $in: [5,6] }} },
{ $project: {
anyElementTrue: { $anyElementTrue: [ "$data" ] } }
}
]
)
結果:
{ "_id" : 5, "anyElementTrue" : true } { "_id" : 6, "anyElementTrue" : false }
最初のドキュメントがtrue
を返したことがわかります 2番目に返されたfalse
。
これは、最初のドキュメントの配列にネストされた配列が含まれているためです。これは、true
を返すのに十分です。 、その内容に関係なく。
2番目のドキュメントにはネストされた配列は含まれていません–2つのfalse
のみが含まれています 値–したがって、false
と評価されます 。