在此文中,我们会实践一下,如何使用Mongodb数据服务存储新的自定义数据。之前我们说过了,使用Mongodb数据服务只有4步这么简单:

1)定义实体

2)定义元数据

3)配置Mongodb数据服务

4)调用API插入数据

在这里,我们希望使用Mongodb存放书籍借阅的信息:

   public enum Status{借出 = 1,归还 = 2,丢失 = 3,}[MongodbPersistenceEntity("Test", DisplayName = "书籍借阅信息", Name = "Book")]public class Book{[MongodbPersistenceItem(MongodbIndexOption = MongodbIndexOption.AscendingAndUnique, IsPrimaryKey = true)][MongodbPresentationItem(ShowInTableView = true, DisplayName = "主键")]public string ID { get; set; }[MongodbPersistenceItem(IsTableName = true)][MongodbPresentationItem(DisplayName = "部门", ShowInTableView = true)]public string DeptName { get; set; }[MongodbPersistenceItem(MongodbIndexOption = MongodbIndexOption.Descending, IsTimeColumn = true, ColumnName = "T")][MongodbPresentationItem(MongodbSortOption = MongodbSortOption.Descending, DisplayName = "时间", ShowInTableView = true)]public DateTime ServerTime { get; set; }[MongodbPresentationItem(DisplayName = "书名", ShowInTableView = true)]public string Name { get; set; }[MongodbPersistenceItem(MongodbIndexOption = MongodbIndexOption.Ascending)][MongodbPresentationItem(DisplayName = "借书者",  ShowInTableView = true, MongodbFilterOption = MongodbFilterOption.TextBoxFilter)]public string UserName { get; set; }[MongodbPersistenceItem(MongodbIndexOption = MongodbIndexOption.Ascending)][MongodbPresentationItem(DisplayName = "状态变化", ShowInTableView = true, MongodbFilterOption = MongodbFilterOption.DropDownListFilter)]public Status Status { get; set; }[MongodbPersistenceItem(MongodbIndexOption = MongodbIndexOption.Ascending)][MongodbPresentationItem(DisplayName = "书籍分类", ShowInTableView = true, MongodbFilterOption = MongodbFilterOption.CheckBoxListFilter)]public string Category { get; set; }[MongodbPresentationItem(DisplayName = "备注")]public string Memo { get; set; }}

其中包含:

1)主键ID,显示在表格视图中,做唯一索引

2)部门名,显示在表格视图中,作为表名

3)书名,显示在表格视图中

4)时间,显示在表格视图中,倒序排列,倒序索引

5)借书者,显示在表格视图中,可以通过文本框进行搜索,索引

6)状态变化,显示在表格视图中,这是一个枚举,可以通过下拉列表进行搜索,索引

7)书籍分类,显示在表格视图中,可以通过复选框进行搜索,索引

8)备注,不显示在表格视图中

并且,我们把这个实体存放在名为Test的分类中,数据库名也就是为Test__Book__年月(分库)。

在定义了数据之后只需调用API插入数据即可:

var book = new Book(){DeptName = DeptName.SelectedValue,ID = Guid.NewGuid().ToString(),Memo = Memo.Text,UserName = UserName.Text,ServerTime = DateTime.Now,Name = BookName.Text,Status = (Status)Enum.Parse(typeof(Status), Status.SelectedValue),Category = BookCategory.Text};MongodbService.MongodbInsertService.Insert(book);

前台:

部门<asp:DropDownList ID="DeptName" runat="server"><asp:ListItem>Tech</asp:ListItem><asp:ListItem>Sales</asp:ListItem><asp:ListItem>Market</asp:ListItem></asp:DropDownList>&nbsp;状态<asp:DropDownList ID="Status" runat="server"><asp:ListItem>借出</asp:ListItem><asp:ListItem>归还</asp:ListItem><asp:ListItem>丢失</asp:ListItem></asp:DropDownList>&nbsp;分类<asp:TextBox ID="BookCategory" runat="server">技术书</asp:TextBox>&nbsp;书名<asp:TextBox ID="BookName" runat="server">《乔布斯传》</asp:TextBox>&nbsp;借书者<asp:TextBox ID="UserName" runat="server">朱晔</asp:TextBox>&nbsp;备注<asp:TextBox ID="Memo" runat="server">是一本好书</asp:TextBox>

之前我们说过,为了安全考虑,如果要把数据提交到Mongodb数据服务中,必须在配置服务中进行配置,把类型注册进去,打开配置后台:

进入全局配置中的Mongodb服务配置(也就是客户端配置),进入配置项列表,增加一项:

名字填写类型的完整名,比如Adhesive.Test.WebApp.Book,然后修改类型完整名也为Adhesive.Test.WebApp.Book:

这就完成了客户端的配置,同样对于服务端,进入Mongodb服务端配置节点,再进入服务配置列表

增加一项,命名为Adhesive.Test.WebApp.Book,然后修改类型完整名也为Adhesive.Test.WebApp.Book:

这里大部分配置和客户端配置差不多,可以从“是否提交到数据库”这个配置看出这是服务端的配置。并且可以看到,服务端使用8个线程来提交数据,而客户端只有一个线程。

至此,我们就可以打开前台提交数据了:

插入一些数据后到后台查看:

点击进入列表视图:

我们插入了三条记录,由于我们在列上定义过搜索的规则,我们可以打开高级数据筛选:

比如,我们只查看状态变化是借出的记录:

我们再添加几条记录,借书者其它名字:

来尝试搜索一下陈锋借出书籍的记录:

结果正式我们需要的!

当然,分组统计和数据量统计功能也同样可用:

数据想怎么看就怎么看!

不需要考虑数据提交时的异步队列、不需要考虑数据的索引、不需要考虑数据的分表分库、不需要考虑数据呈现后台、不需要考虑实现配置,只需要写自己的业务逻辑代码,一切交给Mongodb数据服务。其实Mongodb数据服务主要用来存对内的非业务逻辑的日志、统计和状态数据,因为通用的数据后台完全可以满足我们的需求。在下一篇文章中,我们会介绍如何针对新的数据进行报警的配置。

Adhesive框架系列文章--Mongodb数据服务使用实践相关推荐

  1. Adhesive框架系列文章--Mongodb数据服务模块使用(上)

    之前介绍的应用程序信息中心模块中所有日志.异常.性能和状态数据都依赖Mongodb数据服务,Mongodb数据服务的接口也简单的可以: public interface IMongodbInsertS ...

  2. Adhesive框架系列文章--报警处理流程使用实践

    框架除了报警之外还提供了简单的报警处理流程. 先来看一下报警相关的配置: 比如这里有一个报警,30秒检查一次30秒内相关数据如果超过10条则报警. 在报警后,系统会自动创建一个事件,相关人员登录到后台 ...

  3. Adhesive框架系列文章--分布式组件客户端模块使用

    Memcached是一个很常见的分布式组件,现在有很多.NET下开源的Memcached组件的客户端实现,比如EnyimMemcachedClient.在Adhesive框架中实现了一个分布式组件客户 ...

  4. 无锁编程(Lock Free)框架 系列文章

    无锁编程(Lock Free)框架 系列文章: 1 前置知识:伪共享 原理 & 实战 2 disruptor 使用和原理 图解 3 akka 使用和原理 图解 4 camel 使用和 原理 图 ...

  5. Scott的ASP.net MVC框架系列文章之四:处理表单数据(2)

    前几周我发表了一系列文章介绍我们正在研究的ASP.NET MVC框架.ASP.NET MVC框架为你提供了一种新的开发Web应用程序的途径,这种途径可以让应用程序变得更加层次清晰,而且更加有利于对代码 ...

  6. 2019 年起如何开始学习 ABP 框架系列文章-开篇有益

    阅读文本大概需要 3.3 分钟. 本系列文章推荐阅读地址为:52ABP 开发文档https://www.52abp.com/Wiki/52abp/latest/Welcome-to-52abp 本文的 ...

  7. 大数据系列文章,数据人收藏!

    该系列精选文章来自于「数据社」公众号,作者从事过大数据开发,大数据架构,数据分析相关岗位,有着丰富的实战经验. 该系列文章主要包括大数据平台.数据仓库.数据挖掘等. 系列文章都是基于实战总结的干货,下 ...

  8. 《Delphi传奇》研究系列文章1:服务端控制中心(服务器网关启动器)

    提示:所有的研究心得直接写在源码注释中,对照源码看注释即可学习了解传奇的流程架构.<Delphi传奇>全部源码获取可加入Delphi开发局QQ群:32422310 <Delphi传奇 ...

  9. android下usb框架系列文章---(2)Usb mass_storage turn on的过程

    下面从framework层的ui来看一下插入usb后share的过程,这个动作的触发是从status bar下面弹出的usb connect开始的. frameworks/base/packages/ ...

最新文章

  1. UE4材质着色器全面学习教程
  2. html弹性重叠,关于html5弹性布局(2)
  3. vim不支持python3_彻底颓了—— Vim Python 3 接口不支持中文
  4. 【opencv】17.提取RBG各种颜色c++代码
  5. SpringBoot异常处理-@ExceptionHandler
  6. ejb+jpa_使用Arquillian(包括JPA,EJB,Bean验证和CDI)测试Java EE 6
  7. bat小工具_字节跳动收购效率工具幕布,张一鸣的 To B 野心 | 36氪独家
  8. python3默认的字符编码和文件编码_Python的字符编码之三个问题
  9. mysql句式增删改,MySQL 增删改语句
  10. 博为峰JavaEE技术文章 ——MyBatis RowBounds分页
  11. 如何在 Project 里设置(创建)里程碑
  12. stm32电容触摸按键的实现
  13. 网件刷breed_小白爱折腾 篇二:矿渣小娱C1刷breed以安装固件(适用其他路由器)...
  14. texstudio统计字数
  15. synchdem matlab,数字高程模型(DEM)移动插值算法
  16. 软件测试学习 之 QA、QC与QM
  17. 论文格式要求及字体大小
  18. 备受欢迎的随心金融P2P
  19. OPENCV 寻找图形最大内接矩形
  20. 开启电脑替我记忆之路

热门文章

  1. Collections.binarySearch用法
  2. 7号团队-团队任务3:每日例会(2018-11-29)
  3. nginx修改默认运行80端口的方法
  4. 范数的深刻解读(转自知乎)
  5. [设计模式]工厂模式factory
  6. 《编写高质量代码改善JavaScript程序的188个建议》读书笔记
  7. 【随机过程】随机过程之泊松过程的推广
  8. cocos2d-html5 简易 下拉表单 控件
  9. Ubuntu 12.10 安装 JDK1.7.0_15
  10. [转] 图解Seq2Seq模型、RNN结构、Encoder-Decoder模型 到 Attention