本文的目的是让您熟悉一种替代方式,与您通常在此类教程中看到的相比,在 MongoDB 服务器中存储和检索数据的方式更简洁且方便。希望在本文结束时,您会看到曙光并决定放弃 SQL Server 和实体框架并加入 mongo 列车。

安装MongoDB服务器

如果您的机器上还没有运行 mongodb 服务器,请在继续之前按照下面的教程进行操作。

[

djnitehawk

](/djnitehawk)[

如何在 Windows 和 Linux 上安装 MongoDB 服务器

Dĵ NiGXILPSK ・ 2019 年 12 月 30 日 ・ 3 分钟阅读

#nosql #mongodb #database #tutorial

](/djnitehawk/how-to-install-mongodb-server-on-windows-linux-4in)

脚手架一个控制台应用程序项目

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

dotnet new console -n LearnMongo
start .\LearnMongo\LearnMongo.csproj

进入全屏模式 退出全屏模式

安装依赖

打开包管理器控制台并输入以下内容:

提示:tools > nuget package manager > package manager console

Install-Package MongoDB.Entities

进入全屏模式 退出全屏模式

初始化数据库连接

打开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);
        }
    }
}

进入全屏模式 退出全屏模式

我们指定此应用程序应将我们的数据存储在名为MyDatabase的数据库中,该数据库位于运行在localhost上并侦听默认端口的 mongodb 服务器中。

保存实体

将一个名为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; }
    }
}

进入全屏模式 退出全屏模式

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

然后回到Program.cs文件并在 db 初始化行下面添加以下内容:

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();

进入全屏模式 退出全屏模式

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

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

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

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

进入全屏模式 退出全屏模式

检索实体

可以通过几种不同的方式检索数据。这里有一些例子:

按ID查找

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

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

进入全屏模式 退出全屏模式

按兄弟姐妹计数查找

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

Console.WriteLine($"Count: {result.SiblingCount}");
Console.Read();

进入全屏模式 退出全屏模式

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

按日期范围查找

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();

进入全屏模式 退出全屏模式

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

更新实体

您可以检索完整的实体,更新其属性并将其保存回数据库,或者更新实体的某些属性而无需先检索它们。

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

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

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

await person.SaveAsync();

进入全屏模式 退出全屏模式

更新属性而不检索

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

进入全屏模式 退出全屏模式

下一步...

希望上面的代码能激起您的兴趣,让您更深入地学习如何以简单的方式将 mongodb 与 c# 一起使用。包MongoDB.Entities使得与 mongodb 服务器通信变得非常容易。它的 api 的各个方面都记录在官方网站上。你也可以在 github 上查看源代码:

GitHub 徽标dj-nitehawk/[MongoDB.Entities

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

许可证nugetnuget[测试](https://dev.azure.com/RyanGunner/ MongoDB%20Entities/_build/latest?definitionIdu003d4)discord

MongoDB.实体

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

更多信息:

详细文档请访问官网:

https://mongodb-entities.com

在 GitHub 上查看

Logo

MongoDB社区为您提供最前沿的新闻资讯和知识内容

更多推荐