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; ...
随机推荐
- ORACLE CBC LATCH 检查
###############1.DB meet latch: cache buffers chains event from awr report ,check latch: cache buffe ...
- Silverlight FullScreen 全屏
<UserControl x:Class="FullScreen.MainPage" xmlns="http://schemas.microsoft.com/win ...
- oracle impdp时卡死Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
今天在用impdp导入时,Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX卡在建索引的过程一直不动,也不报错,重试了好几遍还是这样. 后来恍 ...
- android Activity启动过程(四)startActivityUncheckedLocked
final int startActivityUncheckedLocked(ActivityRecord r, ActivityRecord sourceRecord, IVoiceInteract ...
- JDK、JRE、JVM各自是什么、以及什么关系
JDK:java开发工具包 JRE:java运行环境 JVM:java虚拟机 关系: 安装JDK时, JRE.JVM都安装上了 安装JRE时,也把JVM安装上了 JVM(不能单独安装) ...
- Android中当前Activity跳转到当前Activity页面
步骤:先关闭自己,在跳转 case R.id.btn_copy:// 复制 Toast.makeText(mContext, "正在复制", Toast.LENGTH_SHORT) ...
- Ancient Messages UVA - 1103
题目链接:https://vjudge.net/problem/UVA-1103 题目大意:每组数据包含H行W列的字符矩阵(H<=200,W<=50) 每个字符为为16进制 你需要把它转 ...
- git使用笔记-日志
1.查看函数的历史修改 git log -L :git_deflate_bound:zlib.c2.查看HEAD的所有记录 git reflog $ git reflog 1a410ef HEAD@{ ...
- [转]FireFox与IE 下js兼容触发click事件的代码
本文转自:http://www.jb51.net/article/16549.htm FireFox与IE 下js兼容触发click事件 ,对于需要兼容这两者的朋友,就需要参考下下面的代码了<a ...
- 为什么vue+webpack需要用到node,如何部署项目到服务器?
第一部分 之前一直不太理解为什么要使用vue+webapck,还有在使用了vue-cli之后会用到后台,即vue-cli自动帮我们安装了express服务器,在本地服务器上运行,因为我们希望可以模拟在 ...