$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
を使用するフィルターで発生します とドット表記。ただし、これは埋め込み(またはサブ)ドキュメントでのみ有効です 配列フィールドを使用します。
ドキュメントを作成します。
式 :