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