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

mongodb $ match内で、フィールドEQUALINGではなくフィールドMATCHINGをテストする方法

    結果に表示されている内容は正しいです。あなたのアプローチは少し間違っています。期待する結果が必要な場合は、次のアプローチを使用する必要があります。

    collection.aggregate([
      {$match:{greetings:{$elemMatch:query}}},
      {$unwind:"$greetings"},
      {$match:{"greetings.hello":"world"}},
    ]).toArray()
    

    これにより、次の出力が得られるはずです。

    [
      {greetings:{hello:"world"}},
      {greetings:{hello:"world"}},
      {greetings:{"hello":"world","extra":"data"}
    ]
    

    aggregationを使用しているときはいつでも MongoDBで、期待するドキュメントを生成する集約パイプラインを作成する場合は、常に最初のステージからクエリを開始する必要があります。そして、最終的にステージを追加して、後続のステージからの出力を監視します。

    $unwindの出力 ステージは次のようになります:

    [{
      greetings:{hello:"world"}
    },
    {
      greetings:{hello:"world", extra:"data"}
    },
    {
      greetings:{hello:"world"}
    },
    {
      greetings:{aloha:"mars"}
    }]
    

    ここで、使用した3番目のステージを含めると、greetingsと一致します。 値が{hello:"world"}のキー その正確な値を使用すると、パイプラインで2つのドキュメントのみが検出されます。したがって、次のようになります:

    { "greetings" : { "hello" : "world" } }
    { "greetings" : { "hello" : "world" } }
    



    1. MongoDBIDによる遅いクエリ

    2. ノードMongoDBの追加中にReplicaSetIdが競合する

    3. MongoDBでコレクションを作成、表示、ドロップする方法

    4. ClusterControl1.4.2の発表-DevOpsエディション