10.3. MongoDB 操作
温馨提醒
在 Furion
包中默认集成了 EFCore
,如果不使用 EFCore
,可安装纯净版 Furion.Pure
代替 Furion
。
10.3.1 关于 MongoDB
MongoDB
是一个基于分布式文件存储的数据库。由 C++
语言编写。旨在为 WEB
应用提供可扩展的高性能数据存储解决方案。
MongoDB
是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
10.3.2 如何集成
在 Furion
框架中,已经推出 MongoDB
拓展包 Furion.Extras.DatabaseAccessor.MongoDB。
10.3.2.1 注册 MongoDB
服务
使用非常简单,只需要在 Startup.cs
中添加 services.AddMongoDB(connectionString)
即可。如:
// 方式一
services.AddMongoDB("mongodb://localhost:27017");
// 方式二
services.AddMongoDB(new MongoClientSettings {});
// 方式三
services.AddMongoDB(new MongoUrl {});
10.3.3 基本使用
在使用之前,我们可以通过构造函数注入 IMongoDBRepository
接口,如:
- 非泛型版本
private readonly IMongoDBRepository _mongoRepository;
public PersonService(IMongoDBRepository mongoRepository)
{
_mongoRepository = mongoRepository;
}
10.3.3.1 常见例子
var database = _mongoRepository.Context.GetDatabase("foo");
var collection = database.GetCollection<BsonDocument>("bar");
await collection.InsertOneAsync(new BsonDocument("Name", "Jack"));
var list = await collection.Find(new BsonDocument("Name", "Jack"))
.ToListAsync();
foreach(var document in list)
{
Console.WriteLine(document["Name"]);
}
public class Person
{
public ObjectId Id { get; set; }
public string Name { get; set; }
}
var database = _mongoRepository.Context.GetDatabase("foo");
var collection = database.GetCollection<Person>("bar");
await collection.InsertOneAsync(new Person { Name = "Jack" });
var list = await collection.Find(x => x.Name == "Jack")
.ToListAsync();
foreach(var person in list)
{
Console.WriteLine(person.Name);
}
10.3.3.2 获取 MongoClient
对象
IMongoDBRepository
只封装了 MongoDB
基础功能,如需获取更多操作可通过 .Context
属性获取 MongoClient
对象,如:
var client = _mongoRepository.Context;
10.3.4 反馈与建议
与我们交流
给 Furion 提 Issue。
了解更多
想了解更多 MongoDB
知识可查阅 MongoDB 仓库。