$expr 集計式演算子の使用を許可しますのみ 。使用しているドット表記は、フィールド"values" : [ 1 ]の配列要素にアクセスするためには機能しません。 。 $arrayElemAtを使用する必要があります 演算子、そしてそれはうまくいきます。
コードfind({$expr: {$eq: ["$value1", "$value2"]}}) $exprが機能したため、 集計式演算子
そして、コードfind({$expr: {$eq: ["$value1", "$values.0"]}}) 動作しませんでした-予想どおり。集計演算子では、$values.0 、0 配列フィールドのインデックスではなく、フィールド名として解釈されます。
ドット表記は$exprで正常に機能します また。サンプルドキュメントの例を次に示します。
{ "_id" : 1, "val" : { "0" : 99, "a" : 11 } }
$exprを使用しています およびドット表記:
db.test.find({ $expr: { $eq: [ "$val.0", 99 ] } } )
db.test.find({ $expr: { $eq: [ "$val.a", 11 ] } } )
両方のクエリがドキュメントを返します-一致は$exprを使用するフィルターで発生します とドット表記。ただし、これは埋め込み(またはサブ)ドキュメントでのみ有効です 配列フィールドを使用します。
ドキュメントを作成します。
式 :