mongodb是nosql数据库吗 5 NoSQL | MongoDB入门实战教程( 二 )


{......"BookstoreDatabaseSettings": {"BooksCollectionName": "Books","ConnectionString": "mongodb://mongo-master:27017","DatabaseName": "BookStoreDB"}}需要注意的是:这里的连接字符串指向的是一个没有设置用户名密码的MongoDB节点 。如果你的MongoDB节点设置了用户名密码 或者 复制集分片集 之类的 , 请修改为匹配的连接字符串 。
然后 , 创建一个配置项类 , 也放到Models目录中:
namespace EDT.BookStore.API.Models{public class BookStoreDatabaseSettings : IBookStoreDatabaseSettings{public string BooksCollectionName { get; set; }public string ConnectionString { get; set; }public string DatabaseName { get; set; }}public interface IBookStoreDatabaseSettings{string BooksCollectionName { get; set; }string ConnectionString { get; set; }string DatabaseName { get; set; }}}最后 , 将其加入到IoC容器中控制:
public void ConfigureServices(IServiceCollection services){.....    // AutoMapper Settingsservices.AddAutoMapper(typeof(MappingConfigs));// MongoDB Settingsservices.Configure<BookStoreDatabaseSettings>(Configuration.GetSection(nameof(BookStoreDatabaseSettings)));services.AddSingleton<IBookStoreDatabaseSettings>(sp =>sp.GetRequiredService<IOptions<BookStoreDatabaseSettings>>().Value);}这里 , IBookstoreDatabaseSettings 接口使用单一实例服务生存期在 DI 中注册 。在注入时 , 接口实例时将解析为 BookStoreDatabaseSettings 对象 。
添加BookService提供CRUD服务
在Services目录下 , 创建IBookService接口:
namespace EDT.BookStore.API.Services{public interface IBookService{IList<Book> Get();Task<IList<Book>> GetAsync();Book Get(string id);Task<Book> GetAsync(string id);Book Create(Book book);Task<Book> CreateAsync(Book book);void Update(string id, Book bookIn);Task UpdateAsync(string id, Book bookIn);void Remove(string id);Task RemoveAsync(string id);}}然后 , 创建BookService 实现 IBookService 接口 。
namespace EDT.BookStore.API.Services{public class BookService : IBookService{private readonly IMongoCollection<Book> _books;public BookService(IBookStoreDatabaseSettings settings){var mongoClient = new MongoClient(settings.ConnectionString);var mongoDatabase = mongoClient.GetDatabase(settings.DatabaseName);_books = mongoDatabase.GetCollection<Book>(settings.BooksCollectionName);}public Book Create(Book book){_books.InsertOne(book);return book;}public async Task<Book> CreateAsync(Book book){await _books.InsertOneAsync(book);return book;}public IList<Book> Get(){return _books.Find(book => true).ToList();}public async Task<IList<Book>> GetAsync(){return await _books.Find(book => true).ToListAsync();}public Book Get(string id){return _books.Find(book => book.Id == id).FirstOrDefault();}public async Task<Book> GetAsync(string id){return await _books.Find(book => book.Id == id).FirstOrDefaultAsync();}public void Remove(string id){_books.DeleteOne(book => book.Id == id);}public async Task RemoveAsync(string id){await _books.DeleteOneAsync(book => book.Id == id);}public void Update(string id, Book bookIn){_books.ReplaceOne(book => book.Id == id, bookIn);}public async Task UpdateAsync(string id, Book bookIn){await _books.ReplaceOneAsync(book => book.Id == id, bookIn);}}}在上面的代码中 , 会通过构造函数从DI检索IBookStoreDatabaseSettings实例获取MongoDB连接字符串、数据库名 和 集合名 。
当然 , 我们也可以使用 约定大于配置 的方式 , 统一采用实体类的名字 作为默认的 集合名 , 示例如下:
_books = mongoDatabase.GetCollection<Book>(typeof(Book).Name);


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: