.Net Core 3.0 对 MongoDB 的多条件查询(两种)操作
前言
在日常开发中,偶尔会用到 MongoDB 的数据操作,也花费了一些时间调试,因此在此处记录一下,共同进步。
废话少说,出招吧!
正文
2.1 准备工作
首先需要引入 .Net 平台链接 MongoDB 的动态库:MongoDB.Driver;
然后创建默认 DBContext 实体类:
(将数据库以及表的信息引入到系统中备用,数据库链接信息最好是放置在配置文件中,便于不同环境灵活配置,次非本文重点就直接默认了)
using MongoDB.Bson;
using MongoDB.Driver;
namespace DBContext.DataBase
{
public class MongoDBContextDefault
{
//连接地址
private static string conn = "mongodb://0.0.0.0:0000";
//连接服务端
static MongoClient client_pub = new MongoClient(conn);
//数据库名称
private static string dbName = "MongDBName";
//集合名称
private static string collName_Table1 = "Table1";
private static string collName_Table2 = "Table2";
//获取指定数据库
static IMongoDatabase db_Test = client_pub.GetDatabase(dbName);
//获取指定集合 BsonDocument数据库文档对象
public static IMongoCollection<BsonDocument> colle_Table1 = db_Test.GetCollection<BsonDocument>(collName_Table1);// BsonDocument:最终会以 Json 对象来取值
public static IMongoCollection<Table2Model> colle_Table2Model = db_Test.GetCollection<Table2Model>(collName_Table2);// Table2Model:与表字段完全一致的对象,取值方便
}
}
2.2 数据访问--获取 Json 对象
直接上代码,看注释即可:
(传入的查询条件,需要和数据库中的类型匹配)(若通过 ID 查询,需要将条件值转为 Guid 类型)
using DBContext.DataBase;
using MongoDB.Bson;
using MongoDB.Bson.IO;
using MongoDB.Bson.Serialization;
using MongoDB.Driver;
using Newtonsoft.Json.Linq;
public List<JObject> GetValues(string name, string id)
{
FilterDefinitionBuilder<BsonDocument> builderFilter = Builders<BsonDocument>.Filter;
DateTime startTime = DateTime.Now.AddDays(-7);//只同步最近七天有更新的流程
FilterDefinition<BsonDocument> filter = builderFilter.And(builderFilter.Eq("name", name), // 多条件查询
builderFilter.Eq("id", new Guid(id)), // id 需要转换成 Guid 类型
builderFilter.Gte("stime", startTime)); // Time 需要是 DateTime 类型
var result = MongoDBContextDefault.colle_ProcInstData.Find<BsonDocument>(filter).ToList(); // 获取数据
List<JObject> jTokens = new List<JObject>();
var setjson = new JsonWriterSettings
{
OutputMode = JsonOutputMode.Strict
};
foreach (var item in result) // 逐个转为 JObject,备用(后续循环,可以直接通过 JObjectItem["name"] 进行取值)
{
JObject item_jo = JObject.Parse(item.ToJson(setjson));
jTokens.Add(item_jo);
}
return jTokens;
}
2.3 数据访问--获取指定对象类型
此方案中的查询字符串和上一章节是有区别的,具体如下:
(查询条件先拼接成 json 字符串,再转 BsonDocument 对象)
public void Method(string name,string id)
{
DateTime dtcondition = DateTime.Now.AddDays(-7);
// 时间上差一个月,所以月份 -1 // 具体原因未知。。。待后续补充
string strdate = $"new Date({dtcondition.Year},{dtcondition.Month - 1},{dtcondition.Day})";
string querystr = $"{{$and:[{{'name':'{name}'}}" +
$",{{'id':CSUUID('{id}')}}" + // 另一种根据 ID 查询方式
$",{{'time':{{$gte:{strdate}}}}}]}}";
var querycon = BsonSerializer.Deserialize<BsonDocument>(querystr);
var dataresult = MongoDBContextDefault.colle_Table2.Find(querycon).ToList();
// 这里的 dataresult 结果类型是 List<Table2Model>,可以直接跟属性取值,更方便
}
注:暂列这两种查询吧,后续继续补充,有问题欢迎指正。
.Net Core 3.0 对 MongoDB 的多条件查询(两种)操作的更多相关文章
- .Net Core 3.0 对 MongoDB 的多条件(两种)查询操作
前言 在日常开发中,偶尔会用到 MongoDB 的数据操作,也花费了一些时间调试,因此在此处记录一下,共同进步. 废话少说,出招吧! 正文 2.1 准备工作 首先需要引入 .Net 平台链接 Mo ...
- ASP.NET Core 1.0中实现文件上传的两种方式(提交表单和采用AJAX)
Bipin Joshi (http://www.binaryintellect.net/articles/f1cee257-378a-42c1-9f2f-075a3aed1d98.aspx) Uplo ...
- ASP.NET Core 2.0 MVC 发布部署--------- Ubuntun 16.04 X64 具体操作
.Net Core 部署到Ubuntu 16.04 中的步骤 1.安装工具 1.apache 2..Net Core(dotnet-sdk-2.0) 3.Supervisor(进程管理工具,目的是服务 ...
- Windows2003 IIS6.0支持32位和64位两种模式的设置方法
IIS 6.0 可支持 32 位和 64 位两种模式.但是,IIS 6.0 不支持在 64 位版本的 Windows 上同时运行这两种模式.ASP.NET 1.1 只在 32 位模式下运行.而 ASP ...
- MongoDB添加secondary节点的两种方法
前段时间维护的一个事业群的其中一条业务线的开发找到运维,提出来了一个MongoDB的优化问题,那段时间MongoDB正在从op管理移交给db进行维护,整个部门都对MongoDB的运维经验缺乏,Mong ...
- mongodb多个条件查询in,日期查询,嵌套查询,统计集合总数等常用实例
1. 多个条件查询in in db.inventory.find( { qty: { $in: [ 5, 15 ] } } ) 2. 日期查询 db.books.find({}) 查询时间大于6-,结 ...
- Centos 7 中 部署 asp.net core 3.0 + nginx + mongodb 的一些新手简单入门,非docker
目录 零.准备工作 一.部署Mongodb 1.安装Mongodb 2.创建mongodb的数据目录 3.设置目录权限 4.设置mongodb启动 5.修改mongodb的配置文件 6.启动Mongo ...
- ASP.Net Core 5.0 MVC中AOP思想的体现(五种过滤器)并结合项目案例说明过滤器的用法
执行顺序 使用方法,首先实现各自的接口,override里面的方法, 然后在startup 类的 ConfigureServices 方法,注册它们. 下面我将代码贴出来,照着模仿就可以了 IActi ...
- MongoDB 文档的查询和插入操作
MongoDB是文档型数据库,有一些专门的术语,和关系型DB相似,但也有差异,例如,Collection类似于关系型DB的Table,document类似于row,key/value pair类似于c ...
- 在IIS上部署.net core的webapi项目 以及502.5错误的两种解决方法
首先要在服务器上面安装.net core https://github.com/dotnet/core/tree/master/release-notes/download-archives 这里面有 ...
随机推荐
- Apache ShenYu 学习笔记一
1.简介 这是一个异步的,高性能的,跨语言的,响应式的 API 网关. 官网文档:https://shenyu.apache.org/zh/docs/index 仓库地址:https://github ...
- 记一次nginx配置不当引发的499与failover 机制失效
背景 nginx 499在服务端推送流量高峰期长期以来都是存在的,间或还能达到告警阈值触发一小波告警,但主观上一直认为499是客户端主动断开,可能和推送高峰期的用户打开推送后很快杀死app有关,没有进 ...
- 2.OS-Virtualization|抽象:进程
进程:运行中的程序. 没有运行前,就是一个代码,他是静态的. 通过一系列抽象,有了状态. 通过进程抽象,我们需要明白计算机设计的一些思考点:如何分离?如何管理?如何抽象? 运行 就绪 阻塞 它就是一个 ...
- 2023-01-13:joxit/docker-registry-ui是registry的web界面工具之一。请问部署在k3s中,yaml如何写?
2023-01-13:joxit/docker-registry-ui是registry的web界面工具之一.请问部署在k3s中,yaml如何写? 答案2023-01-13: yaml如下: apiV ...
- 2021-11-01:寻找重复数。给定一个包含 n + 1 个整数的数组 nums ,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数
2021-11-01:寻找重复数.给定一个包含 n + 1 个整数的数组 nums ,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数.假设 nums 只有 一个重复的整数 ...
- 2021-10-28:打家劫舍 II。你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装
2021-10-28:打家劫舍 II.你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金.这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的.同时,相邻的房屋装 ...
- Djnago常用命令
pip: bundle,创建包含多个包的pybundles:freeze,显示所有已安装的包:help,显示可用命令:install,安装包:search,搜索PyPi:uninstall,卸载包:u ...
- flutter 中使用 WebView加载H5页面异常net:ERR_CLEARTEXT_NOT_PERMITTED
最近有个flutter项目中根据搜索结果跳转到相应的H5页面发现老是报错,曾现在闲暇拉出来解决哈 先来看一个搜索功能的测试 已进入详情页面就提示错误,尴尬了. 只有去检测代码了撒 Search.dar ...
- JS加载机制
做开发多年后发现自己思维任然只定位在功能的实现:忽略了很多代码最终的实现,加载机制等 那我们接下来就借助几篇博客来理理天天看见的js:理理他究竟是怎么过执行的 一.代码检测 首先浏览器会对所有js 进 ...
- WPF 自定义控件 二次渲染 问题记录
问题 将多个自定义控件加载到到一个页面的Grid上显示.然后突然将一个控件从Grid里面清除,控件依然在后台处理数据. 过段时间再加入Grid.然后一些已经改变的页面属性就消失了. 原因 经过查找是一 ...