sql >> データベース >  >> NoSQL >> MongoDB

$exprクエリ演算子が配列ドット表記で機能しないようです

    $expr 集計式演算子の使用を許可しますのみ 。使用しているドット表記は、フィールド"values" : [ 1 ]の配列要素にアクセスするためには機能しません。 。 $arrayElemAtを使用する必要があります 演算子、そしてそれはうまくいきます。

    コードfind({$expr: {$eq: ["$value1", "$value2"]}}) $exprが機能したため、 集計式演算子 $eq を使用しました 、ない MongoDBクエリ言語(MQL)の演算子 $ eq 。両方の演算子は似ていますが、使用法と構文が異なることに注意してください。

    そして、コードfind({$expr: {$eq: ["$value1", "$values.0"]}}) 動作しませんでした-予想どおり。集計演算子では、$values.00 配列フィールドのインデックスではなく、フィールド名として解釈されます。

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

    ドキュメントを作成します。 Aggregation Pipeline Operators 言う:




    1. mongodbで特定の条件の重複を削除するにはどうすればよいですか?

    2. MongoDBドキュメントサブドキュメント配列にサブドキュメントのIDを挿入して返します

    3. db.collectionNamesはNode.jsでは機能しません

    4. Redisデータ構造のスペース要件