MongoDB配列タイプクエリー:$elemMatchオペレータ


説明
$elemMatch配列クエリー操作は、配列値の少なくとも1つがすべてのクエリー条件に完全に一致するドキュメントをクエリーするために使用されます.構文の形式は次のとおりです.
{ : { $elemMatch: { , , ... } } }

クエリ条件が1つしかない場合は$elemMatchを使用する必要はありません.
制限
  • $whereクエリー条件を$elemMatch内に指定できません.
  • $textクエリー条件を$elemMatch内に指定できません.

  • ≪インスタンス|Instance|emdw≫
    次のテストデータがあります.
    { _id: 1, results: [ 82, 85, 88 ] }
    { _id: 2, results: [ 75, 88, 89 ] }

    次の文は、results配列に80以上85未満の値を含むドキュメントを一致させるために使用されます.
    db.scores.find(
       { results: { $elemMatch: { $gte: 80, $lt: 85 } } }
    )

    次のクエリの結果、ドキュメント内のresultsの82は80以上85未満を満たします.
    { "_id" : 1, "results" : [ 82, 85, 88 ] }

    配列ネストされたドキュメント
    たとえば、次のテストデータがあります.
    { _id: 1, results: [ { product: "abc", score: 10 }, { product: "xyz", score: 5 } ] }
    { _id: 2, results: [ { product: "abc", score: 8 }, { product: "xyz", score: 7 } ] }
    { _id: 3, results: [ { product: "abc", score: 7 }, { product: "xyz", score: 8 } ] }

    次の文はresults配列にproductが「xyz」でscoreが8以上の値を含むドキュメントを一致させるために使用されます.
    db.survey.find(
       { results: { $elemMatch: { product: "xyz", score: { $gte: 8 } } } }
    )

    クエリの結果は次のとおりです.
    { _id: 3, results: [ { product: "abc", score: 7 }, { product: "xyz", score: 8 } ] }

    単一クエリー条件
    $elemMatchオペレータを使用する必要はありません.たとえば、次のクエリがあります.
    //        $elemMatch    
    db.survey.find(
       { results: { $elemMatch: { product: "xyz" } } }
    )

    $elemMatchオペレータは単一のクエリー条件のみで、次のような書き方で完全に使用できます.
    db.survey.find(
       { "results.product": "xyz" }
    )

    公式サイトhttps://docs.mongodb.com/manu...
    学習園
    個人ブログ:https://xuexiyuan.cn/article/detail/227.html