วิธีทำงานกับ MongoDB ใน. NET

MongoDB เป็นฐานข้อมูล NoSQL แบบโอเพนซอร์สที่ได้รับความนิยมซึ่งให้ปริมาณงานสูงสำหรับแอปพลิเคชันที่ขับเคลื่อนด้วยข้อมูลของคุณ ซึ่งแตกต่างจากฐานข้อมูลเชิงสัมพันธ์เช่น SQL Server, Oracle และ MySQL ซึ่งจัดเก็บข้อมูลในตารางตามสคีมาที่เข้มงวด MongoDB เก็บข้อมูลในเอกสารด้วยสคีมาที่ยืดหยุ่น มีฐานข้อมูลที่ไม่ใช่เชิงสัมพันธ์มากมายเช่น CouchDB, RavenDB และ Couchbase อย่างไรก็ตามฉันชอบ MongoDB เป็นหลักเนื่องจากความยืดหยุ่นความเร็วและความสามารถในการสืบค้นแบบไดนามิก

MongoDB ใช้รูปแบบ BSON ภายใต้ประทุนเพื่อแสดงเอกสาร JSON ที่เป็นหัวใจของที่เก็บข้อมูล BSON หรือ“ Binary JSON” เป็นรูปแบบการจัดลำดับข้อมูลที่เข้ารหัสไบนารีที่มีน้ำหนักเบาและมีประสิทธิภาพซึ่งรองรับการส่งผ่านข้อมูลและการค้นหาที่รวดเร็ว BSON ยังอนุญาตให้ MongoDB รองรับชนิดข้อมูล ได้แก่ int, long, date, floating point และ decimal128 ซึ่งไม่ได้แสดงใน JSON 

ในเอกสาร MongoDB เป็นส่วนหนึ่งของคอลเล็กชันในลักษณะเดียวกับที่แถวเป็นส่วนหนึ่งของตารางในฐานข้อมูลเชิงสัมพันธ์ เอกสารคือชุดของคู่เขตข้อมูลและค่าซึ่งสามารถซ้อนกันได้ โปรดทราบว่าค่าใน MongoDB อาจเป็นเอกสารอาร์เรย์เอกสารอาร์เรย์ BSON หรือเพียงประเภท BSON มาดูกันว่าเราจะทำงานกับ MongoDB โดยใช้ C # ได้อย่างไร 

ติดตั้ง MongoDB และสร้างโครงการใหม่

เริ่มต้นด้วยการดาวน์โหลด MongoDB ไบนารี แตกไฟล์ไบนารีไปยังโฟลเดอร์ที่คุณเลือกในระบบของคุณและสร้างโฟลเดอร์แยกต่างหาก (ในกรณีของฉันคือ C: \ data \ db) สำหรับข้อมูล จากนั้นในการเริ่มต้น MongoDB ให้ไปที่โฟลเดอร์ที่ติดตั้ง MongoDB และดำเนินการmongodคำสั่งในหน้าต่างพรอมต์คำสั่ง นั่นควรเริ่มต้น MongoDB ที่พอร์ต 27017 ตามค่าเริ่มต้น

สร้างโครงการแอ็พพลิเคชันคอนโซลใหม่ใน Visual Studio และติดตั้งแพ็คเกจ MongoDB.Driver ผ่าน NuGet Package Manager Console ด้วยคำสั่งต่อไปนี้  

PM> Install-Package MongoDB.Driver

สิ่งนี้จะติดตั้งแพ็คเกจ NuGet สามแพ็คเกจต่อไปนี้ในคราวเดียว

  • MongoDB.Bson
  • MongoDB.Driver.Core
  • MongoDB.Driver

เชื่อมต่อกับอินสแตนซ์ MongoDB ของคุณ

ในการเชื่อมต่อกับอินสแตนซ์ MongoDB ที่พอร์ตเริ่มต้น 27017 คุณสามารถใช้ตัวสร้างเริ่มต้นของMongoClientคลาสดังที่แสดงด้านล่าง

ลูกค้า var = MongoClient ใหม่ ();

ตอนนี้พิจารณาชั้นเรียนต่อไปนี้ เราจะใช้คลาสนี้เพื่อเก็บข้อมูลใน MongoDB

ผู้แต่งระดับสาธารณะ

    {

        รหัส int สาธารณะ {get; ชุด; }

        สตริงสาธารณะ FirstName {get; ชุด; }

        สตริงสาธารณะ LastName {get; ชุด; }

    }

สร้างฐานข้อมูลและคอลเลกชัน

รายการรหัสต่อไปนี้แสดงวิธีสร้างฐานข้อมูลและคอลเลกชันภายในจากนั้นแทรกวัตถุภายในคอลเลกชัน

โมฆะคงที่หลัก (สตริง [] args)

    {           

        var connectionString;

        ลูกค้า var = MongoClient ใหม่ (connectionString);           

        IMongoDatabase db = client.GetDatabase (“”);

        Author author = new Author

        {

            Id = 1,

            ชื่อจริง,

            นามสกุล

        };

        var collection = db.GetCollection (“ ผู้เขียน”);

        collection.InsertOne (ผู้เขียน);

        Console.Read ();

    }

โปรดทราบว่าควรรวมเนมสเปซต่อไปนี้ในโปรแกรมของคุณ

ใช้ MongoDB.Bson;

ใช้ MongoDB.Driver;

ตอนนี้อ้างถึงMainวิธีการในรายการโค้ดด้านบน โปรดสังเกตว่าคำสั่งต่อไปนี้จะสร้างฐานข้อมูลใหม่ที่ชื่อ””ถ้าไม่มีอยู่ตามชื่อนั้น

IMongoDatabase db = client.GetDatabase(“”);

ในทำนองเดียวกันคำสั่งต่อไปนี้จะสร้างคอลเล็กชันของ”Author”อ็อบเจ็กต์ใหม่หากไม่มีอยู่ ไม่ว่าในกรณีใดGetCollectionวิธีการนี้จะส่งคืนอินสแตนซ์คอลเลคชัน

var collection = db.GetCollection (“ ผู้เขียน”);

เพิ่มเอกสารในคอลเลกชัน

ต่อไปเราจะสร้างอินสแตนซ์ของAuthorคลาสและกำหนดค่าให้กับคลาสFirstNameและLastNameคุณสมบัติ

Author author = new Author

{

    Id = 1,

    ชื่อจริง,

    นามสกุล

};

ใช้คำสั่งด้านล่างเพื่อแทรกอินสแตนซ์ของAuthorคลาสลงในคอลเล็กชัน

collection.InsertOne (ผู้เขียน);

โปรดทราบว่าคุณสามารถแทรกเอกสารหลายชุดพร้อมกันโดยใช้InsertManyหรือInsertManyAsyncวิธีการ รายการรหัสต่อไปนี้แสดงให้เห็นถึงวิธีInsertManyการใช้งาน

ใช้ระบบ;

ใช้ System.Collections.Generic;

ใช้ MongoDB.Bson;

ใช้ MongoDB.Driver;

โมฆะคงที่หลัก (สตริง [] args)

    {           

        var connectionString;

        ลูกค้า var = MongoClient ใหม่ (connectionString);           

        IMongoDatabase db = client.GetDatabase (“”);

        var collection = db.GetCollection ("ผู้เขียน");

        var author1 = BsonDocument ใหม่

        {

            {” id”, 1},

            {” firstname”,“ Joydip”},

            {” lastname”,“ Kanjilal”}

        };

        var author2 = BsonDocument ใหม่

        {

            {” id”, 2},

            {” firstname”,“ Steve”},

            {” lastname”,“ Smith”}

        };

      var author3 = BsonDocument ใหม่

        {

            {” id”, 3},

            {” firstname”,“ Gary”},

            {” lastname”,“ สตีเวนส์”}

        };

        ผู้เขียน var = รายการใหม่ ();

        ผู้เขียนเพิ่ม (ผู้แต่ง 1);

        ผู้เขียนเพิ่ม (ผู้แต่ง 2);

        ผู้เขียนเพิ่ม (ผู้แต่ง 3);

        collection.InsertMany (ผู้เขียน);

        Console.Read ();

    }

BsonDocumentชั้นในแพคเกจ MongoDB.Bson จะใช้เพื่อแสดงเอกสาร BSON ข้อมูลโค้ดต่อไปนี้แสดงวิธีแสดงชื่อของฐานข้อมูลที่มีอยู่ในอินสแตนซ์ของ MongoDB ที่ทำงานในระบบ

var connectionString;

ลูกค้า var = MongoClient ใหม่ (connectionString);           

  โดยใช้ (var cursor = client.ListDatabases ())

  {

    var databaseDocuments = cursor ToList ();

    foreach (var db ใน databaseDocuments)

      {

        Console.WriteLine (db [“ name”]. ToString ());

      }

  }

เมื่อคุณเรียกใช้ข้อมูลโค้ดด้านบนคุณจะเห็นชื่อของฐานข้อมูล (เช่น“ ) แสดงอยู่ในหน้าต่างคอนโซล คุณยังสามารถใช้วิธีอะซิงโครนัสListDatabasesAsyncเพื่อแสดงรายการชื่อฐานข้อมูลดังที่แสดงในข้อมูลโค้ดที่ระบุด้านล่าง

ส่วนตัวคง async Task DisplayDatabaseNames ()

    {

        var connectionString;

        ลูกค้า var = MongoClient ใหม่ (connectionString);

        ลอง

        {

            โดยใช้ (var cursor = await client.ListDatabasesAsync ())

            {

                รอเคอร์เซอร์ ForEachAsync (document => Console.WriteLine (document ToString ()));

            }               

        }

        จับ

        {

            // เขียนรหัสของคุณเองที่นี่เพื่อจัดการข้อยกเว้น

        }

    }

MongoDB เป็นฐานข้อมูล NoSQL ยอดนิยมที่มีโมเดลข้อมูลที่ยืดหยุ่นและปรับขนาดได้อย่างสง่างาม MongoDB ให้การสนับสนุนสำหรับความสามารถในการปรับขนาดแนวนอนโดยใช้เทคนิคที่เรียกว่า Sharding ฉันจะพูดถึงแนวคิดขั้นสูงเพิ่มเติมใน MongoDB ในโพสต์ในอนาคตที่นี่ ในระหว่างนี้คุณอาจต้องการอ่านเกี่ยวกับไดรเวอร์ MongoDB C # ในเอกสาร MongoDB