.Net Core 3.0 对 MongoDB 的多条件查询(两种)操作

net,core,mongodb,条件,查询,两种,操作 · 浏览次数 : 1063

小编点评

## MongoDB 数据访问指南 **2.1 准备工作** 1. **引入 MongoDB.Driver 库**: ```csharp using MongoDB.Driver; ``` 2. **创建默认数据库连接实体类**: ```csharp 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); // 获取指定集合 public static IMongoCollection colle_Table1 = db_Test.GetCollection(collName_Table1); public static IMongoCollection colle_Table2Model = db_Test.GetCollection(collName_Table2); } } ``` **2.2 数据访问--获取 Json 对象直接上代码** ```csharp using MongoDB.Bson; using MongoDB.Bson.IO; using MongoDB.Bson.Serialization; using MongoDB.Driver; using Newtonsoft.Json.Linq; public List GetValues(string name, string id) { // 创建筛选定义 FilterDefinitionBuilder builderFilter = Builders.Filter; DateTime startTime = DateTime.Now.AddDays(-7); // 只同步最近七天有更新的流程 FilterDefinition filter = builderFilter.And(builderFilter.Eq("name", name), builderFilter.Eq("id", new Guid(id)), // id 需要转换成 Guid 类型 builderFilter.Gte("stime", startTime)); // 执行查询 var result = colle_ProcInstData.Find(filter).ToList(); // 转化结果为 JObject List jTokens = new List(); foreach (var item in result) { JObject item_jo = JObject.Parse(item.ToJson(new JsonWriterSettings { OutputMode = JsonOutputMode.Strict })); jTokens.Add(item_jo); } return jTokens; } ``` **2.3 数据访问--获取指定对象类型** ```csharp public void Method(string name, string id) { // 时间条件 DateTime dtcondition = DateTime.Now.AddDays(-7); // 创建查询字符串 string strdate = $"new Date({dtcondition.Year},{dtcondition.Month - 1},{dtcondition.Day})"; // 通过 ID 查询 string querystr = $"{and:[{{'name':'{name}'}}\" + ",{{'id':CSUUID('{id}')}}\" + ",{{'time':{{$gte:{strdate}}}}}]}"; // 执行查询 var dataresult = colle_Table2.Find(BsonSerializer.Deserialize(querystr)).ToList(); // 直接访问指定属性 // ... } ``` **注:** 1. 以上代码仅展示了获取 Json 对象和获取指定对象类型两种基本操作。 2. 需要补充更多逻辑,例如处理查询条件、异常处理等。

正文

前言

  在日常开发中,偶尔会用到 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 平台链接 MongoDB 的动态库:MongoDB.Driver; 然后创建默认 DBContext 实体类: (将数

看我是如何用C#编写一个小于8KB的贪吃蛇游戏的

译者注:这是Michal Strehovský大佬的一篇文章,他目前在微软.NET Runtime团队工作,主要是负责.NET NativeAOT功能的开发。我在前几天看到这篇文章,非常喜欢,虽然它的内容稍微有点过时(还是使用的.NET Core 3.0),不过其中的一些编程技巧和思维方式很受用,特

8KB的C#贪吃蛇游戏热点答疑和.NET7版本

在之前的一篇文章《看我是如何用C#编写一个小于8KB的贪吃蛇游戏》中,介绍了在.NET Core 3.0的环境下如何将贪吃蛇游戏降低到8KB。不过也有很多小伙伴提出了一些疑问和看法,主要是下面这几个方面: .NET Core 3.0可以做到这么小,那么.NET7表现会不会更好? 不敢在生产中用这样的

C# 8.0 添加和增强的功能【基础篇】

.NET Core 3.x 和 .NET Standard 2.1 支持 C# 8.0。本文对此版本的更新内容做了简单的记录,希望有助于你我的理解。

.NET Core Swagger Actions require a unique method/path combination for Swagger/OpenAPI 3.0. Use ConflictingActionsResolver as a workaround

遇到的问题 因为新增了一个控制器方法,从而导致在运行Swagger的时候直接报错,异常如下: SwaggerGeneratorException: Conflicting method/path combination "POST api/UserOperationExample" for acti

一套基于 .NET Core 开发的支付SDK集 - paylink

前言 在我们的日常工作开发中对接一些第三方支付是比较常见的,如最常见的就是支付宝、微信支付的对接。今天给大家推荐一个基于.NET Core开发的支付SDK集:paylink,它极大简化了API调用及通知的处理流程从而大大提供我们的工作生产效率。 运行环境 .NET Core 3.1、.NET 6.0

武装你的WEBAPI-OData使用Endpoint

本文属于 OData 系列文章 Introduction 更新: 由于新版的 OData 已经默认使用了 endpoint 模式(Microsoft.AspNetCore.OData 8.0.0),不再需要额外配置,本文已经过时(asp.net core 3.1)。 最近看 OData 的 devb

[转帖]net.ipv4.tcp_max_syn_backlog & net.core.somaxconn

https://www.cnblogs.com/apink/p/15632882.html TCP SYN_REVD, ESTABELLISHED 状态对应的队列 TCP 建立连接时要经过 3 次握手,在客户端向服务器发起连接时,对于服务器而言,一个完整的连接建立过程,服务器会经历 2 种 TCP 

NetMvc通过亚马逊方式服务器端和客户端上传MinIO顺利解决

前言: 1、由于项目是.NET Framework 4.7 MVC LayUI,所以需要找一个资源站点存放项目中静态资源文件; 2、需要支持服务端和客户端都支持上传文件方式; 3、调用简单,涉及库越少越好。 结果: 调用 AWSSDK.S3 和 AWSSDK.Core 实现文件上传到 MinIO ;

使用VPN【wireguard】搭建安全,方便的跳板机【0到1架构系列】

什么是跳板机? 部署一台具有公网通讯能力的服务器,开发或运维通过这台服务器的远程登陆功能,远程登陆该服务器然后与处于内网的服务器进行通讯或作业,那么这台服务器一般称为"跳板机"。 跳板机的安全 一般来说不建议在搭建公网服务的服务器上面暴露远程登陆端口,因为公网IP己经暴露,部署专门用于登陆的跳板机可