博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql的where条件转换成mongdb筛选条件
阅读量:6947 次
发布时间:2019-06-27

本文共 8136 字,大约阅读时间需要 27 分钟。

解析字符串 filterModel1 and filterModel2 and (filterModel3 or filterModel4)

1.转换成mongo的筛选条件

///         /// where转换成mongo的查询条件        ///         ///         /// 
public static string WhereToMongoWhere(string str) { str = (str.StartsWith("(")) ? str.Substring(1) : str; str = (str.EndsWith(")")) ? str.Substring(0, str.Length - 1) : str; if (str.StartsWith("(")) { str = str.Substring(1); } if (str.EndsWith(")")) { str = str.Substring(0, str.Length - 1); } 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 : -1; var n1 = orMatch.Success ? orMatch.Index : -1; var res_str = ""; if (n != -1 && n1 != -1) { if (n < n1 && n != -1) { //and if (n != -1) { var beforeString = str.Substring(0, n).Trim();//str.slice(0, n);//截取下标0到下标n var afterString = str.Substring(n + 4, str.Length - (n + 4));//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 != -1) { var beforeString = str.Substring(0, n1).Trim();// str.slice(0, n1); var afterString = str.Substring(n1 + 3, str.Length - (n1 + 3));//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 == -1 && n != -1) { var beforeString = str.Substring(0, n).Trim();//str.slice(0, n); var afterString = str.Substring(n + 3, str.Length - (n + 3));//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 == -1 && n1 != -1) { var beforeString = str.Substring(0, n1).Trim();//str.slice(0, n1); var afterString = str.Substring(n1 + 3, str.Length - (n1 + 3));//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; } }
View Code

2.筛选条件赋值

///         /// 条件赋值        ///         ///         /// 
private static string CheckCases(string str) { string res_str = ""; string beforeString = ""; string afterString = ""; FilterModel f; try { f = JsonConvert.DeserializeObject
(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
(JsonConvert.SerializeObject(f.Value)); var firstValue = jArray.FirstOrDefault(); if (firstValue != null) { if (firstValue.Type.ToString() == typeof(String).Name) { afterString = string.Join("\",\"", jArray.ToObject
>()); afterString = "\"" + afterString + "\""; } else { afterString = string.Join(",", jArray.ToObject
>()); } } 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; }
View Code

 

转载于:https://www.cnblogs.com/Jenny-1/p/10796527.html

你可能感兴趣的文章
Delphi XE5中使用jar包
查看>>
org.apache.felix.framework-5.6.12源码解析——org.apache.felix.framework文件夹最后的部分...
查看>>
Python3的tcp socket接收不定长数据包接收到的数据不全。
查看>>
b2b
查看>>
第三周Java学习总结
查看>>
OGRE的安装和编译【转+改】
查看>>
获取管理员组用户
查看>>
Mysql—(2)—
查看>>
简历的分布式
查看>>
[转]string和stringstream用法总结
查看>>
LeetCode:Rotate Array
查看>>
jquery pagination.js 分页
查看>>
DOM对象与jquery对象
查看>>
1.6(SQL学习笔记)存储过程
查看>>
XXS level8
查看>>
分布式日志收集系统:Facebook Scribe
查看>>
VxWorks下PCI驱动的配置与测试
查看>>
NSString 中包含中文字符时转换为NSURL
查看>>
Unity 协程停不了?
查看>>
多个文本框点击复制 zClip (ZeroClipboard)有关问题
查看>>