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と評価されます 。