开放的编程资料库

当前位置:我爱分享网 > C#教程 > 正文

C# MongoDB 教程

C#MongoDB教程展示了如何在C#中对MongoDB进行编程。C#教程是C#语言的综合教程。

MongoDB

MongoDB是一个NoSQL跨平台的面向文档的数据库。它是可用的最流行的数据库之一。MongoDB由MongoDBInc.开发,并作为免费开源软件发布。

MongoDB中的记录就是文档,它是由字段和值对组成的数据结构。MongoDB文档类似于JSON对象。字段的值可能包括其他文档、数组和文档数组。MongoDB将文档存储在集合中。集合类似于关系数据库中的表,文档类似于行。

MongoDB在后台以称为BSON的二进制编码格式表示JSON文档。BSON扩展了JSON模型以提供额外的数据类型、有序字段,并在不同语言中高效地进行编码和解码。.NETdriver使用BsonDocument来表示BSON

MongoDB.Driver

MongoDB.Driver是MongoDB的官方.NET驱动程序。

$ dotnet add package MongoDB.Driver

我们需要将MongoDB.Driver包添加到每个.NETCore项目中。

MongoDB创建数据库

mongo工具是MongoDB的交互式JavaScriptshell接口,它为系统管理员提供了一个接口,也为开发人员提供了一种直接使用数据库测试查询和操作的方法。

$ mongo testdb
MongoDB shell version v4.0.7
connecting to: mongodb://127.0.0.1:27017/testdb?gssapiServiceName=mongodb
...
> db
testdb
> db.cars.insert({name: "Audi", price: 52642})
> db.cars.insert({name: "Mercedes", price: 57127})
> db.cars.insert({name: "Skoda", price: 9000})
> db.cars.insert({name: "Volvo", price: 29000})
> db.cars.insert({name: "Bentley", price: 350000})
> db.cars.insert({name: "Citroen", price: 21000})
> db.cars.insert({name: "Hummer", price: 41400})
> db.cars.insert({name: "Volkswagen", price: 21600})

我们创建一个testdb数据库并在cars集合中插入八个文档。我们将在教程中使用这些数据。

C#MongoDB列表数据库

第一个示例连接到MongoDB服务器并检索其数据库。

using MongoDB.Driver;
using MongoDB.Bson;

namespace SimpleEx
{
    class Program
    {
        static void Main(string[] args)
        {
            var dbClient = new MongoClient("mongodb://127.0.0.1:27017");
            var dbList = dbClient.ListDatabases().ToList();

            Console.WriteLine("The list of databases are:");

            foreach (var item in dbList)
            {
                Console.WriteLine(item);
            }
        }
    }
}

该示例连接到MongoDB服务器并检索其所有数据库。

var dbClient = new MongoClient("mongodb://127.0.0.1:27017");

MongoClient类用于连接到MongoDB服务器。27017是MongoDB服务器默认监听的端口。

var dbList = dbClient.ListDatabases().ToList();

我们使用ListDatabases方法获取数据库列表。

foreach (var item in dbList)
{
    Console.WriteLine(item);
}

我们遍历列表并打印项目。

$ dotnet run
The list of databases are:
{ "name" : "admin", "sizeOnDisk" : 32768.0, "empty" : false }
{ "name" : "config", "sizeOnDisk" : 86016.0, "empty" : false }
{ "name" : "local", "sizeOnDisk" : 81920.0, "empty" : false }
{ "name" : "test", "sizeOnDisk" : 212992.0, "empty" : false }
{ "name" : "testdb", "sizeOnDisk" : 155648.0, "empty" : false }

C#MongoDB运行命令

RunCommand方法在数据库上运行一个命令。

using MongoDB.Driver;
using MongoDB.Bson;

namespace MongoCommand
{
    class Program
    {
        static void Main(string[] args)
        {
            var dbClient = new MongoClient("mongodb://127.0.0.1:27017");

            IMongoDatabase db = dbClient.GetDatabase("testdb");

            var command = new BsonDocument { { "dbstats", 1 } };
            var result = db.RunCommand<BsonDocument>(command);
            Console.WriteLine(result.ToJson());
        }
    }
}

该示例连接到testdb数据库并获取其统计信息。

IMongoDatabase db = dbClient.GetDatabase("testdb");

我们使用GetDatabase方法获取数据库。

var command = new BsonDocument { { "dbstats", 1 } };
var result = db.RunCommand<BsonDocument>(command);

使用RunCommand方法,我们执行dbstats命令。该命令返回一个文档,该文档表示MongoDB文档。

Console.WriteLine(result.ToJson());

我们将文档以JSON格式打印到控制台。

$ dotnet run
{ "db" : "testdb", "collections" : 3, "views" : 0, "objects" : 15, "avgObjSize" : 57.0,
"dataSize" : 855.0, "storageSize" : 77824.0, "numExtents" : 0, "indexes" : 3,
"indexSize" : 77824.0, "fsUsedSize" : 160688828416.0, "fsTotalSize" : 254721126400.0, "ok" : 1.0 }

C#MongoDB查找文档

我们查询具有特定过滤器的文档。过滤器被提供给Find方法,该方法查找应用给定过滤器的文档。

using MongoDB.Driver;
using MongoDB.Bson;

namespace FindDocument
{
    class Program
    {
        static void Main(string[] args)
        {
            var dbClient = new MongoClient("mongodb://127.0.0.1:27017");

            IMongoDatabase db = dbClient.GetDatabase("testdb");
            var cars = db.GetCollection<BsonDocument>("cars");

            var filter = Builders<BsonDocument>.Filter.Eq("price", 29000);

            var doc = cars.Find(filter).FirstOrDefault();
            Console.WriteLine(doc.ToString());
        }
    }
}

该示例查找包含价格为29000的汽车的文档。

var cars = db.GetCollection<BsonDocument>("cars");

我们使用GetCollection方法获取cars集合。

var filter = Builders<BsonDocument>.Filter.Eq("price", 29000);

一个过滤器被创建;我们找一辆价格等于29000的车。

var doc = cars.Find(filter).FirstOrDefault();

我们将过滤器传递给Find方法并使用FirstOrDefault方法检索它。

$ dotnet run
{ "_id" : ObjectId("5d4d1408463315268eb7376e"), "name" : "Volvo", "price" : 29000.0 }

C#MongoDB查找所有文档

如果我们不为Find方法指定过滤条件,我们将获取所有文档。

using MongoDB.Driver;
using MongoDB.Bson;

namespace FindAll
{
    class Program
    {
        static void Main(string[] args)
        {
            var dbClient = new MongoClient("mongodb://127.0.0.1:27017");
            IMongoDatabase db = dbClient.GetDatabase("testdb");

            var cars = db.GetCollection<BsonDocument>("cars");
            var documents = cars.Find(new BsonDocument()).ToList();

            foreach (BsonDocument doc in documents)
            {
                Console.WriteLine(doc.ToString());
            }
        }
    }
}

该示例从cars集合中检索所有文档。

$ dotnet run
{ "_id" : ObjectId("5d4d13d6463315268eb7376b"), "name" : "Audi", "price" : 52000 }
{ "_id" : ObjectId("5d4d13f5463315268eb7376c"), "name" : "Mercedes", "price" : 57127.0 }
{ "_id" : ObjectId("5d4d1408463315268eb7376e"), "name" : "Volvo", "price" : 29000.0 }
{ "_id" : ObjectId("5d4d140d463315268eb7376f"), "name" : "Bentley", "price" : 350000.0 }
{ "_id" : ObjectId("5d4d1411463315268eb73770"), "name" : "Citroen", "price" : 21000.0 }
{ "_id" : ObjectId("5d4d1415463315268eb73771"), "name" : "Hummer", "price" : 41400.0 }
{ "_id" : ObjectId("5d4d1419463315268eb73772"), "name" : "Volkswagen", "price" : 21600.0 }

我们得到了所有七个文档。

C#MongoDB查询

Mongo支持多种查询过滤运算符,例如GtLtGte

using MongoDB.Driver;
using MongoDB.Bson;

namespace MongoQuery
{
    class Program
    {
        static void Main(string[] args)
        {
            var dbClient = new MongoClient("mongodb://127.0.0.1:27017");

            IMongoDatabase db = dbClient.GetDatabase("testdb");
            var cars = db.GetCollection<BsonDocument>("cars");

            var builder = Builders<BsonDocument>.Filter;
            var filter = builder.Gt("price", 30000) & builder.Lt("price", 55000);

            var docs = cars.Find(filter).ToList();

            docs.ForEach(doc => {
                Console.WriteLine(doc);
            });
        }
    }
}

该示例打印汽车价格在30000到55000之间的所有文档。

var filter = builder.Gt("price", 30000) & builder.Lt("price", 55000);

我们使用两个运算符构建过滤器:GtLt

$ dotnet run
{ "_id" : ObjectId("5d4d13d6463315268eb7376b"), "name" : "Audi", "price" : 52000 }
{ "_id" : ObjectId("5d4d1415463315268eb73771"), "name" : "Hummer", "price" : 41400.0 }

我们找到了两个符合条件的文档。

C#MongoDB插入文档

使用InsertOne方法将新文档插入到集合中。

using MongoDB.Driver;
using MongoDB.Bson;

namespace InsertDocument
{
    class Program
    {
        static void Main(string[] args)
        {
            var dbClient = new MongoClient("mongodb://127.0.0.1:27017");

            IMongoDatabase db = dbClient.GetDatabase("testdb");

            var cars = db.GetCollection<BsonDocument>("cars");

            var doc = new BsonDocument
            {
                {"name", "BMW"},
                {"price", 34621}
            };

            cars.InsertOne(doc);
        }
    }
}

该示例将一个新的汽车文档插入到cars集合中。

var doc = new BsonDocument
{
    {"name", "BMW"},
    {"price", 34621}
};

创建了一个新的BsonDocument

cars.InsertOne(doc);

使用InsertOne方法将文档插入到集合中。

C#MongoDB跳过和限制

limit查询选项指定要返回的文档数,skip选项跳过指定数量的文档。

using MongoDB.Driver;
using MongoDB.Bson;

namespace LimitSkip
{
    class Program
    {
        static void Main(string[] args)
        {
            var dbClient = new MongoClient("mongodb://127.0.0.1:27017");

            IMongoDatabase db = dbClient.GetDatabase("testdb");

            var cars = db.GetCollection<BsonDocument>("cars");
            var docs = cars.Find(new BsonDocument()).Skip(3).Limit(3).ToList();

            docs.ForEach(doc =>
            {
                Console.WriteLine(doc);
            });
        }
    }
}

该示例从testdb.cars集合中读取,跳过前三个文档,并将输出限制为三个文档。

$ dotnet run
{ "_id" : ObjectId("5d4d140d463315268eb7376f"), "name" : "Bentley", "price" : 350000.0 }
{ "_id" : ObjectId("5d4d1411463315268eb73770"), "name" : "Citroen", "price" : 21000.0 }
{ "_id" : ObjectId("5d4d1415463315268eb73771"), "name" : "Hummer", "price" : 41400.0 }

输出包含三个文档。

C#MongoDB投影

投影确定哪些字段将包含在查询输出中。

using MongoDB.Driver;
using MongoDB.Bson;

namespace Projections
{
    class Program
    {
        static void Main(string[] args)
        {
            var dbClient = new MongoClient("mongodb://127.0.0.1:27017");

            IMongoDatabase db = dbClient.GetDatabase("testdb");

            var cars = db.GetCollection<BsonDocument>("cars");
            var docs = cars.Find(new BsonDocument()).Project("{_id: 0}").ToList();

            docs.ForEach(doc =>
            {
                Console.WriteLine(doc);
            });
        }
    }
}

在示例中,我们找到了所有文档。我们从输出中排除了_id

$ dotnet run
{ "name" : "Audi", "price" : 52000 }
{ "name" : "Mercedes", "price" : 57127.0 }
{ "name" : "Volvo", "price" : 29000.0 }
{ "name" : "Bentley", "price" : 350000.0 }
{ "name" : "Citroen", "price" : 21000.0 }
{ "name" : "Hummer", "price" : 41400.0 }
{ "name" : "Volkswagen", "price" : 21600.0 }

文档的输出不包含_id字段。

C#MongoDB删除文件

使用deleteOne方法删除文档。

using MongoDB.Driver;
using MongoDB.Bson;

namespace DeleteDocument
{
    class Program
    {
        static void Main(string[] args)
        {
            var dbClient = new MongoClient("mongodb://127.0.0.1:27017");

            IMongoDatabase db = dbClient.GetDatabase("testdb");

            var cars = db.GetCollection<BsonDocument>("cars");
            var filter = Builders<BsonDocument>.Filter.Eq("name", "BMW");

            cars.DeleteOne(filter);
        }
    }
}

该示例删除了汽车名称为BMW的文档。

C#MongoDB更新文档

使用UpdateOne方法更新文档。

using MongoDB.Driver;
using MongoDB.Bson;

namespace UpdateDocument
{
    class Program
    {
        static void Main(string[] args)
        {
            var dbClient = new MongoClient("mongodb://127.0.0.1:27017");

            IMongoDatabase db = dbClient.GetDatabase("testdb");

            var cars = db.GetCollection<BsonDocument>("cars");

            var filter = Builders<BsonDocument>.Filter.Eq("name", "Audi");
            var update = Builders<BsonDocument>.Update.Set("price", 52000);

            cars.UpdateOne(filter, update);
        }
    }
}

该示例更新名称为Audi的汽车文档。它为此文件设定了新的价格。

cars.UpdateOne(filter, update);

UpdateOne方法采用过滤器来查找确切的文档和更新操作以执行实际更改。

在本文中,我们在C#中使用了MongoDB。

列出所有C#教程。

未经允许不得转载:我爱分享网 » C# MongoDB 教程

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏