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
に評価する 。