教程:轻松使用 C# 连接 MongoDB!安装 MongoDB 服务器 搭建控制台应用程序项目 安装依赖项 初始化数据库连接 保存实体 检索实体 更新实体 后续步骤……MongoDB.Entities

2025-06-08

教程:使用 C# 轻松实现 MongoDB!

安装 MongoDB 服务器

搭建控制台应用程序项目

安装依赖项

初始化数据库连接

保存实体

检索实体

更新实体

后续步骤...

MongoDB.实体

本文的目的是让您熟悉一种替代的、不太冗长且方便的方法来在 MongoDB 服务器中存储和检索数据,与您通常在这些教程中看到的方法相比。希望在本文结束时,您能看到曙光并决定放弃 SQL Server 和实体框架并加入 mongo 列车。

安装 MongoDB 服务器

如果您的机器上尚未运行 mongodb 服务器,请先按照以下教程进行操作。

搭建控制台应用程序项目

使用 Visual Studio Targetting 创建一个新的控制台应用程序项目.net core或在 Powershell/cmd 窗口中输入以下内容:

dotnet new console -n LearnMongo
start .\LearnMongo\LearnMongo.csproj
Enter fullscreen mode Exit fullscreen mode

安装依赖项

打开包管理器控制台并输入以下内容:
提示: tools > nuget package manager > package manager console

Install-Package MongoDB.Entities
Enter fullscreen mode Exit fullscreen mode

初始化数据库连接

打开Program.cs文件并使其看起来像以下内容:

using MongoDB.Entities;
using System.Threading.Tasks;

namespace LearnMongo
{
    static class Program
    {
        private async static Task Main()
        {
            await DB.InitAsync("MyDatabase", "localhost", 27017);
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

我们指定此应用程序应将我们的数据存储在名为MyDatabasemongodb 的数据库中,该数据库在localhost默认端口上监听运行。

保存实体

添加一个名为的新类文件Person.cs到项目并使其看起来像以下内容:

using MongoDB.Entities;
using System;

namespace LearnMongo
{
    public class Person : Entity
    {
        public string Name { get; set; }
        public DateTime DateOfBirth { get; set; }
        public int SiblingCount { get; set; }
    }
}
Enter fullscreen mode Exit fullscreen mode

您想要持久化到 mongodb 的主/根实体必须从Entity我们之前安装的包提供的类继承。

然后返回Program.cs文件并在数据库初始化行下面添加以下内容:

var lisa = new Person
{
    Name = "Lisa Malfrey",
    DateOfBirth = new DateTime(1983, 10, 11),
    SiblingCount = 1
};

await lisa.SaveAsync();

Console.WriteLine($"Lisa's ID: {lisa.ID}");
Console.Read();
Enter fullscreen mode Exit fullscreen mode

现在通过点击运行程序ctrl+f5。您将看到实体已被保存并自动分配了一个 ID。

注意:ID 属性来自基Entity类,因此我们不必继续手动将其添加到我们创建的每个实体中。

如果您使用数据库管理器或 mongo shell 查看数据库内部,您将看到Person创建了一个名为的集合,并添加了一条新记录,如下所示:

{
    "_id": ObjectId("5e0c682ddd3765736cb8ca56"),
    "Name": "Lisa Malfrey",
    "DateOfBirth": ISODate("1983-10-10T18:30:00Z"),
    "SiblingCount": 1
}
Enter fullscreen mode Exit fullscreen mode

检索实体

数据可以通过几种不同的方式检索。以下是一些示例:

通过 ID 查找

var result = await DB.Find<Person>().OneAsync(lisa.ID);

Console.WriteLine($"Found Person: {result.Name}");
Console.Read();
Enter fullscreen mode Exit fullscreen mode

按兄弟数查找

var result = (await DB.Find<Person>()
                      .ManyAsync(p => p.SiblingCount >= 1))
                      .First();

Console.WriteLine($"Count: {result.SiblingCount}");
Console.Read();
Enter fullscreen mode Exit fullscreen mode

这里我们说的是找到许多Person至少有 1 个兄弟的实体。linq.First()方法只是从找到的列表中选择第一个人。

按日期范围查找

var result = await DB.Queryable<Person>()
                     .Where(p => p.DateOfBirth > new DateTime(1983, 10, 10) &&
                                 p.DateOfBirth < new DateTime(1983, 10, 12))
                     .FirstOrDefaultAsync();

Console.WriteLine($"Birthday: {result.DateOfBirth.ToLocalTime()}");
Console.Read();
Enter fullscreen mode Exit fullscreen mode

这里我们使用IQueryable接口来检索第一个出生日期在两个日期范围内的人。

更新实体

您可以检索完整的实体,更新其属性并将其保存回数据库,或者在不先检索实体的情况下更新实体的某些属性。

通过检索完整实体进行更新

var person = await DB.Find<Person>().OneAsync(lisa.ID);

person.Name = "Lisa Kudrow";
person.SiblingCount = 2;

await person.SaveAsync();
Enter fullscreen mode Exit fullscreen mode

更新属性而不检索

await DB.Update<Person>()
        .Match(p => p.ID == lisa.ID)
        .Modify(p => p.Name, "Lisa Kudrow")
        .Modify(p => p.SiblingCount, 2)
        .ExecuteAsync();
Enter fullscreen mode Exit fullscreen mode

后续步骤...

希望以上代码能够激发您的兴趣,让您更深入地学习如何轻松地通过 C# 使用 MongoDB。该软件包MongoDB.Entities让您能够非常轻松地与 MongoDB 服务器通信。其 API 的各个方面均已在官方网站上记录。您也可以在 GitHub 上查看源代码:

GitHub 徽标 dj-nitehawk / MongoDB.实体

MongoDB 的数据访问库,具有优雅的 API、LINQ 支持和内置实体关系管理

执照 nuget nuget 测试 不和谐

MongoDB.实体

轻量级的 .net 标准库,几乎没有任何开销,旨在通过抽象官方驱动程序来简化对 mongodb 的访问,同时在其上添加有用的功能,从而形成一个优雅的 API 界面,产生美观、人性化的数据访问代码。

更多信息:

请访问官方网站获取详细文档:






鏂囩珷鏉ユ簮锛�https://dev.to/djnitehawk/tutorial-mongodb-with-c-the-easy-way-1g68
PREV
如何在 Ubuntu 上安装 K9s:分步指南
NEXT
React 中的组件测试:使用 Jest 和 Enzyme 测试什么以及如何测试