.net core MongoDB 初试
是这样的,我们有一个场景,另一个服务器是写到MongoDB里面,我们的MVC页面要展示,需要分页展示
自己写了一个DAL
public class MongoConnect
{
public string ConnectString { get; set; }
} public class MongoBaseDAL<TEntity>
{
public MongoBaseDAL(IOptions<MongoConnect> options)
{
ConnectString = options.Value.ConnectString;
} private string ConnectString { get; set; } = "192.168.50.110:27017"; protected MongoClient Create()
{
var client = new MongoClient($"mongodb://{ConnectString}");
return client;
} protected IMongoDatabase GetDatabase(string database)
{
var client = Create();
var db = client.GetDatabase(database); return db;
} protected IMongoCollection<TEntity> CreateQuery(string database,string tableName)
{
var db = GetDatabase(database);
return db.GetCollection<TEntity>(tableName);
} protected PageDataView<TEntity> Page(string database, string tableName, Dictionary<string, BsonValue> dictionary, int pageSize, int currentPage)
{
var where = Builders<TEntity>.Filter.Empty;
if (dictionary.Count > )
{
var filterBuilder = Builders<TEntity>.Filter; List<FilterDefinition<TEntity>> listFilter = new List<FilterDefinition<TEntity>>(); foreach (var pair in dictionary)
{
listFilter.Add(filterBuilder.Eq(pair.Key, pair.Value));
} where = filterBuilder.And(listFilter);
} PageDataView<TEntity> result = new PageDataView<TEntity>(); var query = CreateQuery(database, tableName);
result.TotalRecords = (int)query.CountDocuments(where);
result.TotalPages = result.TotalRecords / pageSize;
if (result.TotalRecords % pageSize > )
result.TotalPages += ; var list = query.Find(where).Skip((currentPage - ) * pageSize).Limit(pageSize).ToList();
result.Items = list; return result;
}
}
比如有个类CreatedTableLog
那个Helper就是
public class CreatedTableLogHelper: MongoBaseDAL<CreatedTableLog>
{
public static string Database = "Base";
public static string Table = "CreatedTableLog"; public CreatedTableLogHelper(IOptions<MongoConnect> options) : base(options)
{
} public PageDataView<CreatedTableLog> GetListByPage(Dictionary<string, BsonValue> dictionary, int pageSize, int currentPage)
{
return Page(Database, Table, dictionary, pageSize, currentPage);
}
}
在StartUp里面增加代码
#region MongoDB
services.Configure<MongoConnect>(Configuration.GetSection("MongoConnect"));
services.AddScoped(typeof(MongoBaseDAL<>));
services.AddScoped<CreatedTableLogHelper>();
#endregion
打开配置文件
appsettings.Development.json这个是DEBUG版本的配置文件
写入配置
"MongoConnect": {
"ConnectString": "192.168.50.110:27017"
}
192.168.50.110是我测试环境是MongoDB服务器地址,端口默认
appsettings.Development.json这个是Release版本的配置文件可能这个地址就是localhost了,要对应更改
比如CreatedTableLog表有三个字段
UserId和NickName需要查询
Dictionary<string, BsonValue> dictionary = new Dictionary<string, BsonValue>();
var index = model.Start == ? : (model.Start / model.Length) + ;
if (model.UserId != )
{
dictionary.Add("UserId", BsonInt64.Create(model.UserId));
}
if (!string.IsNullOrWhiteSpace(model.NickName))
{
dictionary.Add("NickName", BsonString.Create(model.NickName));
}
var result = CreatedTableLogHelper.GetListByPage(dictionary, model.Length, index);
这样你以为就ok了?no no no
会报错的,为什么同一个实体model,写入正常,读会报错_id错误呢?
因为实体model如果没有Id类型是ObjectId,会自动构建,但是你反序列化就会错误了
增加一个继承类
public class MongoDbBase
{
private ObjectId _id;
public ObjectId Id
{
get { return _id; }
set { _id = value; }
}
}
你需要反序列化的实体对象继承
比如CreatedTableLog改为
public class CreatedTableLog: MongoDbBase
再读一下,对了吧?大功告成
.net core MongoDB 初试的更多相关文章
- Asp.Net Core MongoDB
废话不说直接上代码: using MongoDB.Bson.Serialization.Attributes; namespace XL.Core.MongoDB { public interface ...
- .Net Core MongoDB 简单操作。
一:MongoDB 简单操作类.这里引用了MongoDB.Driver. using MongoDB.Bson; using MongoDB.Driver; using System; using S ...
- ASP.NET Core+MongoDB(一)
项目类库:.Net Standar 2.0web:ASP.NET CORE 2.2 版本 先上图,看我们的解决方案结构: 分别对上面的工程进行说明:1.KYSharpCore:为公共的基础类,最底层 ...
- .NET Core+MongoDB集群搭建与实战
目录 安装 MongoDB apt 直接安装(方法1) apt 仓库安装(方法2) 方法1.2启动 MongoDB 通过二进制包安装(方法3) 安装依赖 deb 安装 MongoDB tgz 安装 M ...
- MongoDB—— 写操作 Core MongoDB Operations (CRUD)
MongoDB使用BSON文件存储在collection中,本文主要介绍MongoDB中的写操作和优化策略. 主要有三种写操作: Create Update ...
- MongoDB—— 读操作 Core MongoDB Operations (CRUD)
本文主要介绍内容:从MongoDB中请求数据的不同的方法 Note:All of the examples in this document use the mongo shell interface ...
- MongoDB初试备份及恢复
MongoDB作为文档数据库,有 1.登录MongoDB官网,地址:https://www.mongodb.com/download-center#community , 根据自己操作系统下载相应版 ...
- .net Core MongoDB用法演示
C#驱动MongoDB的本质是将C#的操作代码转换为mongo shell,驱动的API也比较简单明了,方法名和js shell的方法名基本都保持一致,熟悉mongo shell后学习MongoDB的 ...
- Core Data初试
CoreDataStack.swift import CoreData class CoreDataStack: NSObject { let context: NSManagedObjectCont ...
随机推荐
- PHP使用array_filter查找二维数组中符合字段和字段值的数据集合
1.方法: /** * 获取符合字段和字段值的数组集合 * @param array $data 待过滤数组 * @param string $field 要查找的字段 * @param $value ...
- 数据可视化之powerBI基础(八)PowerBI的表格,你真的会用吗
https://zhuanlan.zhihu.com/p/64413000 在PowerBI的可视化对象中,还有两个「表格」对象,表格的作用不仅可以在报表提供明细数据,还经常用来测试度量值的返回结果, ...
- 3dTiles 数据规范详解[4.2] i3dm瓦片二进制数据文件结构
i3dm,即 Instanced 3D Model,实例三维模型的意思. 诸如树木.路灯.路边的垃圾桶.长椅等具有明显 重复 特征的数据.这类数据用得较少(笑,现在都喜欢搞BIM.倾斜摄影.精模.白模 ...
- PDFtoWORD_V1.1版本支持PDF文档中的文字和图片一起转化到word文档中了~
昨天菜鸟小白做了一个小软件——PDFtoWORD,作用就是将pdf文件中的文字提取出来自动转化为可编辑的word类型.但是这个软件目前也只能将文件PDF中的文字提取出来,还无法提取图片.为了 ...
- CSS文本溢出,显示省略号(...)
方式1:这种方式就是必须要跟width搭配使用,当你使用的display:flex; 的时候可能会影响样式 width: 200px; overflow: hidden; /*超出部分隐藏*/ tex ...
- 基于Redis分布式锁的正确打开方式
分布式锁是在分布式环境下(多个JVM进程)控制多个客户端对某一资源的同步访问的一种实现,与之相对应的是线程锁,线程锁控制的是同一个JVM进程内多个线程之间的同步.分布式锁的一般实现方法是在应用服务器之 ...
- Burp Suite Report - 报告功能
1. 通过点击Host选择不同的颜色,可以设置严重性: 2.生成网页版应用分析报告:选中所有条目->右击网址,保存所有选中项目,存储格式为html.
- C++ RMQ问题
RMQ问题是区间求最值问题,就是求一个数组第i个到第j个中最大数或最小数的算法. 这个算法有一些倍增思想,也有一些二分思想.具体是一个数组,m[i][j]表示从i开始往后数2的j次方个数的最大值或最小 ...
- echarts 实战 : 怎么写出和自动生成的一样的 tooltip ?
找到答案很麻烦,但答案本身很简单. 假设 需要给 echarts 的数据是 option. option.tooltip.formatter = (params) => { return `&l ...
- map数据按照list排序
简介 (Introduction): 背景 需要对字段进行排序,但是,一个字段的结果存在一个map中,一个存在list中,需要让map的数组,按照list的顺序进行排序 结构图 list顺序 [ { ...