Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MongoDB

MongoDB में db.collection.find() के लिए क्वेरी प्लान की जानकारी कैसे समझें?

क्वेरी प्लान की जानकारी के लिए MongoDB में explain() का उपयोग करें।

इंडेक्स बनाना और नमूना डेटा इंसर्ट करना

> db.demo637.ensureIndex({ClientName:1});
> db.demo637.insert({ClientName:"John"});
> db.demo637.insert({ClientName:"Bob"});
> db.demo637.insert({ClientName:"Johnson"});

केस 1: रेगेक्स /john/ (केस-इनसेंसिटिव पार्शियल मैच)

> db.demo637.find({ClientName:/john/}).explain();

महत्वपूर्ण आउटपुट भाग:

"winningPlan" : {
  "stage" : "FETCH",
  "inputStage" : {
    "stage" : "IXSCAN",
    "filter" : { "ClientName" : { "$regex" : "john" } },
    "keyPattern" : { "ClientName" : 1 },
    "indexName" : "ClientName_1",
    "indexBounds" : { "ClientName" : [ "[\"\", {})", "[/john/, /john/]" ] }
  }
}

व्याख्या: रेगेक्स /john/ (एंकर नहीं) इंडेक्स स्कैन (IXSCAN) का उपयोग करता है लेकिन फिल्टर लागू करना पड़ता है क्योंकि यह स्ट्रिंग में कहीं भी "john" खोजता है।

केस 2: रेगेक्स /^john/ (स्टार्ट्स विद - प्रीफिक्स मैच)

> db.demo637.find({ClientName:/^john/}).explain();

महत्वपूर्ण आउटपुट भाग:

"winningPlan" : {
  "stage" : "FETCH",
  "inputStage" : {
    "stage" : "IXSCAN",
    "keyPattern" : { "ClientName" : 1 },
    "indexName" : "ClientName_1",
    "indexBounds" : { "ClientName" : [ "[\"john\", \"joho\")", "[/^john/, /^john/]" ] }
  }
}

व्याख्या: रेगेक्स /^john/ (^ एंकर के साथ) इंडेक्स का अधिक कुशलता से उपयोग करता है क्योंकि यह प्रीफिक्स मैच है। इंडेक्स बाउंड्स "john" से "joho" तक की रेंज दिखाते हैं, जो अधिक सटीक है।

मुख्य अंतर: एंकर रहित रेगेक्स (/john/) की तुलना में एंकर वाले रेगेक्स (/^john/) इंडेक्स का बेहतर उपयोग करते हैं।

  1. - MongoDB एग्रीगेशन: सभी दस्तावेजों में विशिष्ट मानों की गिनती

    इसके लिए MongoDB में aggregate() का उपयोग करें। आइए दस्तावेजों के साथ एक कलेक्शन बनाते हैं: > db.demo718.insertOne({ id:101, details: { OtherDetails: [Chris, Mike, Sam], GroupName: [Group-1], Info: [] } }); { acknowledged : true, insertedId : ObjectId(5eaae258

  1. - MongoDB find() क्वेरी: नेस्टेड दस्तावेज के लिए

    नेस्टेड दस्तावेज से मान प्राप्त करने के लिए, डॉट नोटेशन का उपयोग करें। आइए दस्तावेजों के साथ एक कलेक्शन बनाते हैं: > db.demo591.insert([ { Name: John, Age: 23 }, { Name: Carol, Age: 26 }, { Name: Robert, Age: 29, details: [ { Email: Robert@gmail.com, CountryName:

  1. - MongoDB क्वेरी: फील्ड मानों में "@email" जैसे स्ट्रिंग की खोज करें

    MongoDB find() का उपयोग करके ईमेल स्ट्रिंग खोजें। आइए एक कलेक्शन बनाते हैं: > db.demo727.insertOne({UserId:John@email.com}); { acknowledged : true, insertedId : ObjectId(5eab375f43417811278f5898) } > db.demo727.insertOne({UserId:John@yahoo.com}); { acknowledged : true, insertedId : ObjectId(5