sql的where条件转换成mongdb筛选条件
解析字符串 filterModel1 and filterModel2 and (filterModel3 or filterModel4)
1.转换成mongo的筛选条件
/// <summary>
/// where转换成mongo的查询条件
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string WhereToMongoWhere(string str)
{
str = (str.StartsWith("(")) ? str.Substring() : str;
str = (str.EndsWith(")")) ? str.Substring(, str.Length - ) : str;
if (str.StartsWith("("))
{
str = str.Substring();
}
if (str.EndsWith(")"))
{
str = str.Substring(, str.Length - );
}
var andMatch = Regex.Match(str, @"\band\b", RegexOptions.IgnoreCase);// str.search(/\band\b / i);
var orMatch = Regex.Match(str, @"\bor\b", RegexOptions.IgnoreCase);// str.search(/\bor\b / i);
var n = andMatch.Success ? andMatch.Index : -;
var n1 = orMatch.Success ? orMatch.Index : -;
var res_str = "";
if (n != - && n1 != -)
{ if (n < n1 && n != -)
{
//and
if (n != -)
{
var beforeString = str.Substring(, n).Trim();//str.slice(0, n);//截取下标0到下标n
var afterString = str.Substring(n + , str.Length - (n + ));//str.slice(n + 4, str.length); res_str = "\n \"$and\": [{\n" + WhereToMongoWhere(beforeString) + "\n },{" + WhereToMongoWhere(afterString) + "\n }]"; //No I18N
}
return res_str; }
else
{
//or
if (n1 != -)
{
var beforeString = str.Substring(, n1).Trim();// str.slice(0, n1);
var afterString = str.Substring(n1 + , str.Length - (n1 + ));//str.slice(n1 + 3, str.length); res_str = "\n \"$or\": [{\n" + WhereToMongoWhere(beforeString) + "\n },{" + WhereToMongoWhere(afterString) + "\n }]"; //No I18N
}
return res_str;
} }
else if (n1 == - && n != -)
{ var beforeString = str.Substring(, n).Trim();//str.slice(0, n);
var afterString = str.Substring(n + , str.Length - (n + ));//str.slice(n + 3, str.length); res_str = "\n \"$and\": [{\n" + WhereToMongoWhere(beforeString) + "\n },{" + WhereToMongoWhere(afterString) + "\n }]"; //No I18N
return res_str; }
else if (n == - && n1 != -)
{
var beforeString = str.Substring(, n1).Trim();//str.slice(0, n1);
var afterString = str.Substring(n1 + , str.Length - (n1 + ));//str.slice(n1 + 3, str.length); res_str = "\n \"$or\": [{\n" + WhereToMongoWhere(beforeString) + "\n },{" + WhereToMongoWhere(afterString) + "\n }]"; //No I18N
return res_str;
}
else
{
res_str = " " + CheckCases(str); //No I18N
return res_str;
}
}
2.筛选条件赋值
/// <summary>
/// 条件赋值
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
private static string CheckCases(string str)
{
string res_str = "";
string beforeString = "";
string afterString = "";
FilterModel f;
try
{
f = JsonConvert.DeserializeObject<FilterModel>(str);
}
catch (Exception ex)
{
throw ex;
}
beforeString = f.Field.Trim();
string valueType = f.Value.GetType().Name;
switch (f.QueryType)
{
case QueryType.EQ:
afterString = f.Value.ToString();
if (valueType == typeof(string).Name)
{
res_str = res_str + "\"" + beforeString + "\" : " + "\"" + afterString + "\"";
}
else
{
res_str = res_str + "\"" + beforeString + "\" : " + afterString;
}
break;
case QueryType.GTE:
afterString = f.Value.ToString();
if (valueType == typeof(string).Name)
{
res_str = res_str + "\"" + beforeString + "\":{ \"$gte\" : " + "\"" + afterString + "\"}"; //No I18N
}
else
{
res_str = res_str + "\"" + beforeString + "\":{ \"$gte\" : " + afterString + "}"; //No I18N }
break;
case QueryType.GT:
afterString = f.Value.ToString();
if (valueType == typeof(string).Name)
{
res_str = res_str + "\"" + beforeString + "\":{ \"$gt\" : " + "\"" + afterString + "\"}"; //No I18N
}
else
{
var after = double.Parse(afterString);
res_str = res_str + "\"" + beforeString + "\":{ \"$gt\" : " + after + "}"; //No I18N }
break;
case QueryType.LTE:
afterString = f.Value.ToString();
if (valueType == typeof(string).Name)
{
res_str = res_str + "\"" + beforeString + "\":{ \"$lte\" : " + "\"" + afterString + "\"}"; //No I18N
}
else
{
res_str = res_str + "\"" + beforeString + "\":{ \"$lte\" : " + afterString + "}"; //No I18N }
break;
case QueryType.LT:
afterString = f.Value.ToString();
if (valueType == typeof(string).Name)
{
res_str = res_str + "\"" + beforeString + "\":{ \"$lt\" : " + "\"" + afterString + "\"}"; //No I18N
}
else
{
res_str = res_str + "\"" + beforeString + "\":{ \"$lt\" : " + afterString + "}"; //No I18N }
break;
case QueryType.LIKE:
afterString = f.Value.ToString();
res_str = res_str + "\"" + beforeString + "\" : " + "/" + afterString + "/"; //No I18N
break;
case QueryType.IN:
case QueryType.NE:
if (valueType == typeof(JArray).Name)
{
JArray jArray = JsonConvert.DeserializeObject<JArray>(JsonConvert.SerializeObject(f.Value));
var firstValue = jArray.FirstOrDefault();
if (firstValue != null)
{
if (firstValue.Type.ToString() == typeof(String).Name)
{
afterString = string.Join("\",\"", jArray.ToObject<IEnumerable<string>>());
afterString = "\"" + afterString + "\"";
}
else
{
afterString = string.Join(",", jArray.ToObject<IEnumerable<string>>());
}
} res_str = res_str + "\"" + beforeString + "\": {"; //No I18N
if (f.QueryType == QueryType.IN)
{
res_str = res_str + "\"$in\": [" + afterString + "]}"; //No I18N
}
else
{
res_str = res_str + "\"$ne\": [" + afterString + "]}"; //No I18N
} }
break;
default:
afterString = f.Value.ToString();
if (valueType == typeof(string).Name)
{
res_str = res_str + "\"" + beforeString + "\" : " + "\"" + afterString + "\"";
}
else
{
res_str = res_str + "\"" + beforeString + "\" : " + afterString;
}
break; }
return res_str;
}
sql的where条件转换成mongdb筛选条件的更多相关文章
- 关于sql where id in 转换成数据类型 int 时失败(转)
有执行sql条件语句where id in(@参数)的时候,如果处理不当,就会出现问题:如下面这个存储过程: alter proc Web_gettwtwgoldgameserverGoldSell@ ...
- Sql中把datetime转换成字符串(CONVERT)(转)
一.回顾一下CONVERT()的语法格式: CONVERT (<data_ type>[ length ], <expression> [, style]) 二.这里注重说明一 ...
- Sql中把datetime转换成字符串(CONVERT)
一.回想一下CONVERT()的语法格式: CONVERT (<data_ type>[ length ], <expression> [, style]) 二.这里注重说明一 ...
- 将Microsoft SQL Server 2000数据库转换成MySQL数据库
1. 下载并安装MyODBC.(如果是XP请下载5.3的旧版本,8.x的新版本运行有问题) 2. 创建一个空的MySQL数据库. 3. 在Windows >> 控制面板 >> ...
- hibernate sql查询后对象转换成实体类
在多表查询的时候使用hibernate的sql查询的时候,一般返回的是object[]数组,或者可以使用 session.createSQLQuery(sql).setResultTransform ...
- sql中把时间转换成xx年xx月xx日
DECLARE @dt datetime SET @dt=GETDATE()--1.短日期格式:yyyy-m-d SELECT STUFF(STUFF(CONVERT(char(8),@dt,112) ...
- sql把字符数组转换成表
需求:把字符串1,2,3变成表里的行数据 方法:用自定义函数实现 /* 获取字符串数组的 Table */ from sysobjects where id = object_id('Get_StrA ...
- 使用SQL如何把用逗号等字符隔开的字符串转换成列表(转)
如何把用逗号等字符隔开的字符串转换成列表,下面依逗号分隔符为例: 比如有一个字符串,其值为:香港,张家港,北京,上海用SQL把这个字符串转换成列表的方法是: 1.方法一 WITH A AS (SELE ...
- 数据库表转换成javaBean对象小工具
package test.utils; import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter; ...
随机推荐
- 浅谈APP消息推送
作为移动端APP产品运营最重要的运营手段,消息推送(push)被越来越多的APP厂商所重视,在信息泛滥的移动互联网时代,手机APP应用安装得越来越多,小小的手机屏幕每天收到的消息推送也越来越多,站在用 ...
- java && C# 线程
1.多个线程用到同一个资源的话,必须lock 2.为了解决,在竞争的情况下,优先分配资源给A.就是A和B线程都同时在同一时刻需要资源x,然后的话也不清楚系统是具体怎样调度的.或者说怎样调度,都有可 ...
- (转) HTTP & HTTPS网络协议重点总结(基于SSL/TLS的握手、TCP/IP协议基础、加密学)
HTTP & HTTPS网络协议重点总结(基于SSL/TLS的握手.TCP/IP协议基础.加密学) 原文:http://blog.csdn.net/itermeng/article/detai ...
- Win10 手工安装.netframework3.5
1.装载win10/win8...等镜像文件 2.cmd命令管理员身份运行 3.输入命令:C:\Windows\system32>dism.exe /online /enable-feature ...
- CentOS 6.5下安装Tomcat --专业增强版 非yum
Tomcat安装 通常情况下我们要配置Tomcat是很容易的一件事情,但是如果您要架设多用户多服务的Java虚拟主机就不那么容易了.其中最大的一个问题就是Tomcat执行权限.普通方式配置的Tomca ...
- Excel 解析 (大文件读取)BingExcel
最近在整理一个excel读取与写出的orm框架.使用的saxreader方式,支持百万级别的excel读取. 并且在通常使用中提供了监听的读取方式.如感兴趣的朋友可以稍微了解下 ,项目地址https: ...
- 常见O/R框架介绍
1.hibernate(JPA的一个实现,同时也有自己的特色)2.toplink3.jdo4.ibatis 4.JPA a)意愿统一天下
- Windows下安装ElasticSearch及工具
转载自个人主页 前言 什么是ElasticSearch 官网如是介绍:Elasticsearch 是一个分布式.可扩展.实时的搜索与数据分析引擎. 它能从项目一开始就赋予你的数据以搜索.分析和探索的能 ...
- MySQL报错:Packets larger than max_allowed_packet are not all
MySQL根据配置文件会限制Server接受的数据包大小.有时候大的插入和更新会受 max_allowed_packet 参数限制,导致写入或者更新失败. 修改方法: 1.修改配置文件my.ini m ...
- [转]Android时间获取与使用
编写Android网络程序时难免会遇到手机时间不准确的问题,本文总结了一些常用的时间获取与校正方法: 转载请注明:http://blog.csdn.net/xzy2046 1.获取本机当前时间: Ti ...