Учебное пособие по MongoDB C# (простой способ)
Цель этой статьи — познакомить вас с альтернативным, менее подробным и удобным способом хранения и извлечения данных на сервере MongoDB по сравнению с тем, что вы обычно видите в подобных руководствах. надеюсь, к концу этой статьи вы прозреете и решите отказаться от SQL Server и Entity Framework и сесть на поезд монго.
если на вашем компьютере еще не запущен сервер mongodb, следуйте этот учебник прежде чем двигаться вперед.
создать новый проект консольного приложения, используя таргетинг Visual Studio .net core
или введите следующее в окне 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;
namespace LearnMongo
{
class Program
{
private static void Main(string[] args)
{
new DB("MyDatabase", "localhost", 27017);
}
}
}
мы указываем, что это приложение должно хранить наши данные в базе данных с именем MyDatabase
на сервере mongodb, работающем на localhost
прослушивание порта по умолчанию.
добавить новый файл класса с именем Person.cs
в проект и сделать так, чтобы он выглядел следующим образом:
using MongoDB.Entities.Core;
using System;
namespace LearnMongo
{
class Person : Entity
{
public string Name { get; set; }
public DateTime DateOfBirth { get; set; }
public int SiblingCount { get; set; }
}
}
основные/корневые объекты, которые вы хотите сохранить в mongodb, должны наследоваться от класса Entity
который предоставляется пакетом, который мы установили ранее.
затем вернитесь к Program.cs
файл и добавьте следующее ниже строки инициализации db:
var lisa = new Person {
Name = "Lisa Malfrey",
DateOfBirth = new DateTime(1983, 10, 11),
SiblingCount = 1
};
lisa.Save();
Console.WriteLine($ "Lisa's ID: {lisa.ID}");
Console.Read();
теперь запустите программу, нажав ctrl+f5
. вы увидите, что объект был сохранен и ему автоматически был присвоен идентификатор.
примечание: свойство ID исходит из базы Entity
class, чтобы нам не приходилось добавлять его вручную к каждой создаваемой нами сущности.
если вы заглянете внутрь базы данных с помощью диспетчера баз данных или оболочки mongo, вы увидите, что коллекция называется Person
была создана и добавлена новая запись, которая выглядит так:
{
"_id": ObjectId("5e0c682ddd3765736cb8ca56"),
"Name": "Lisa Malfrey",
"DateOfBirth": ISODate("1983-10-10T18:30:00Z"),
"SiblingCount": 1
}
данные могут быть получены несколькими различными способами. Вот несколько примеров:
найти по ID
var result = DB.Find<Person>().One(lisa.ID);
Console.WriteLine($ "Found Person: {result.Name}");
Console.Read();
найти по количеству братьев и сестер
var result = DB.Find<Person>()
.Many(p => p.SiblingCount >= 1)
.First();
Console.WriteLine($"Count: {result.SiblingCount}");
Console.Read();
здесь мы говорим найти много Person
юридические лица, у которых есть хотя бы 1 брат или сестра. в .First()
linq просто выбирает первого человека из найденного списка.
найти по диапазону дат
var result = DB.Queryable<Person>()
.Where(p => p.DateOfBirth > new DateTime(1983, 10, 10) &&
p.DateOfBirth < new DateTime(1983, 10, 12))
.First();
Console.WriteLine($"Birthday: {result.DateOfBirth.ToLocalTime()}");
Console.Read();
здесь мы используем IQueryable
Интерфейс для получения первого человека, дата рождения которого попадает в диапазон двух дат.
вы можете либо получить весь объект, обновить его свойства и сохранить обратно в базу данных, либо обновить определенные свойства объектов без предварительного их извлечения.
обновление путем получения полного объекта
var lisa = DB.Find<Person>().One(lisa.ID);
lisa.Name = "Lisa Kudrow";
lisa.SiblingCount = 2;
lisa.Save();
обновить свойства без получения
DB.Update<Person>()
.Match(p => p.ID == lisa.ID)
.Modify(p => p.Name, "Lisa Kudrow")
.Modify(p => p.SiblingCount, 2)
.Execute();
надеюсь, приведенный выше код вызвал у вас достаточно интереса, чтобы углубиться в изучение простого использования mongodb с C#. посылка MongoDB.Entities
позволяет чрезвычайно легко общаться с сервером mongodb. каждый аспект его API был задокументирован в вики-разделе пакета. репозиторий github.