MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

クエリに$or演算子が含まれている場合、MongoDBインデックスでクエリを実行できますか?


はい、できます。まず、インデックスを作成してから、explain()を使用する必要があります。まず、MongoDBインデックスを作成しましょう。クエリは次のとおりです。

> db.indexOrQueryDemo.ensureIndex({"First":1});

これにより、次の出力が生成されます

{
   "createdCollectionAutomatically" : false,
   "numIndexesBefore" : 2,
   "numIndexesAfter" : 3,
   "ok" : 1
}

2番目のインデックスを作成するためのクエリは次のとおりです

> db.indexOrQueryDemo.ensureIndex({"Second":1});

これにより、次の出力が生成されます

{
   "createdCollectionAutomatically" : false,
   "numIndexesBefore" : 3,
   "numIndexesAfter" : 4,
   "ok" : 1
}

以下は、インデックスを持つ$or演算子のクエリです。ここでもexplain()を使用しました

> db.indexOrQueryDemo.find({$or:[{First:1}, {Second:2}]}).explain();

これにより、次の出力が生成されます

{
   "queryPlanner" : {
      "plannerVersion" : 1,
      "namespace" : "test.indexOrQueryDemo",
      "indexFilterSet" : false,
      "parsedQuery" : {
         "$or" : [
            {
               "First" : {
                  "$eq" : 1
               }
            },
            {
               "Second" : {
                  "$eq" : 2
               }
            }
         ]
      },
      "winningPlan" : {
         "stage" : "SUBPLAN",
         "inputStage" : {
            "stage" : "FETCH",
            "inputStage" : {
               "stage" : "OR",
               "inputStages" : [
                  {
                     "stage" : "IXSCAN",
                     "keyPattern" : {
                           "First" : 1
                     },
                     "indexName" : "First_1",
                     "isMultiKey" : false,
                     "multiKeyPaths" : {
                        "First" : [ ]
                     },
                     "isUnique" : false,
                     "isSparse" : false,
                     "isPartial" : false,
                     "indexVersion" : 2,
                     "direction" : "forward",
                     "indexBounds" : {
                        "First" : [
                           "[1.0, 1.0]"
                        ]
                     }
                  },
                  {
                     "stage" : "IXSCAN",
                     "keyPattern" : {
                        "Second" : 1
                     },
                     "indexName" : "Second_1",
                     "isMultiKey" : false,
                     "multiKeyPaths" : {
                        "Second" : [ ]
                     },
                     "isUnique" : false,
                     "isSparse" : false,
                     "isPartial" : false,
                     "indexVersion" : 2,
                     "direction" : "forward",
                     "indexBounds" : {
                        "Second" : [
                           "[2.0, 2.0]"
                        ]
                     }
                  }
               ]
            }
         }
      },
      "rejectedPlans" : [ ]
   },
   "serverInfo" : {
      "host" : "DESKTOP-QN2RB3H",
      "port" : 27017,
      "version" : "4.0.5",
      "gitVersion" : "3739429dd92b92d1b0ab120911a23d50bf03c412"
   },
   "ok" : 1
}

  1. $またはOperatorを使用してドキュメントをフェッチするMongoDB

    $ or演算子は、2つ以上の式の配列に対して論理OR演算を実行します。ドキュメントを使用してコレクションを作成しましょう- > db.demo674.insertOne({Name:"Chris",Age:21}); {    "acknowledged" : true,    "insertedId" : ObjectId("5ea3f33604263e90dac943eb") } > db.demo674.insertOne({Name:"David

  2. ネストされたドキュメントを更新するMongoDBクエリ?

    ネストされたドキュメントを更新するには、update()を使用し、その中でドット表記を使用します。ドキュメントを使用してコレクションを作成しましょう- > db.demo607.insertOne( ...    { ...       id:1, ...       "Info1" : { ...          "Name" : "Chris", ...