mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-09-20 02:29:39 +08:00
Update mongodb
This commit is contained in:
@@ -500,8 +500,98 @@ namespace SqlSugar.MongoDb
|
|||||||
var toLowerDoc = new BsonDocument("$toLower", $"${memberName}");
|
var toLowerDoc = new BsonDocument("$toLower", $"${memberName}");
|
||||||
return toLowerDoc.ToJson(UtilMethods.GetJsonWriterSettings());
|
return toLowerDoc.ToJson(UtilMethods.GetJsonWriterSettings());
|
||||||
}
|
}
|
||||||
|
public override string Abs(MethodCallExpressionModel model)
|
||||||
|
{
|
||||||
|
// 取绝对值,MongoDB $abs 操作符
|
||||||
|
var item = model.Args[0].MemberValue;
|
||||||
|
BsonValue memberName = new ExpressionVisitor(context).Visit(item as Expression);
|
||||||
|
var absDoc = new BsonDocument("$abs", $"${memberName}");
|
||||||
|
return absDoc.ToJson(UtilMethods.GetJsonWriterSettings());
|
||||||
|
}
|
||||||
|
|
||||||
#region
|
public override string Round(MethodCallExpressionModel model)
|
||||||
|
{
|
||||||
|
// 四舍五入,MongoDB $round 操作符
|
||||||
|
var item = model.Args[0].MemberValue;
|
||||||
|
BsonValue memberName = new ExpressionVisitor(context).Visit(item as Expression);
|
||||||
|
var roundDoc = new BsonDocument("$round", new BsonArray { $"${memberName}" });
|
||||||
|
return roundDoc.ToJson(UtilMethods.GetJsonWriterSettings());
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Floor(MethodCallExpressionModel model)
|
||||||
|
{
|
||||||
|
// 向下取整,MongoDB $floor 操作符
|
||||||
|
var item = model.Args[0].MemberValue;
|
||||||
|
BsonValue memberName = new ExpressionVisitor(context).Visit(item as Expression);
|
||||||
|
var floorDoc = new BsonDocument("$floor", $"${memberName}");
|
||||||
|
return floorDoc.ToJson(UtilMethods.GetJsonWriterSettings());
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Substring(MethodCallExpressionModel model)
|
||||||
|
{
|
||||||
|
// 截取字符串,MongoDB $substr 操作符(推荐 $substrBytes)
|
||||||
|
var item = model.DataObject as Expression;
|
||||||
|
var start = model.Args[0].MemberValue;
|
||||||
|
var length = model.Args[1].MemberValue;
|
||||||
|
BsonValue memberName = new ExpressionVisitor(context).Visit(item);
|
||||||
|
BsonValue startValue = new ExpressionVisitor(context).Visit(start as Expression);
|
||||||
|
BsonValue lengthValue = new ExpressionVisitor(context).Visit(length as Expression);
|
||||||
|
var substrDoc = new BsonDocument("$substrBytes", new BsonArray { $"${memberName}", startValue, lengthValue });
|
||||||
|
return substrDoc.ToJson(UtilMethods.GetJsonWriterSettings());
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Replace(MethodCallExpressionModel model)
|
||||||
|
{
|
||||||
|
// 替换字符串,MongoDB $replaceAll 操作符
|
||||||
|
var item = model.DataObject as Expression;
|
||||||
|
var find = model.Args[0].MemberValue;
|
||||||
|
var replacement = model.Args[1].MemberValue;
|
||||||
|
BsonValue memberName = new ExpressionVisitor(context).Visit(item);
|
||||||
|
BsonValue findValue = new ExpressionVisitor(context).Visit(find as Expression);
|
||||||
|
BsonValue replacementValue = new ExpressionVisitor(context).Visit(replacement as Expression);
|
||||||
|
var replaceDoc = new BsonDocument("$replaceAll", new BsonDocument
|
||||||
|
{
|
||||||
|
{ "input", $"${memberName}" },
|
||||||
|
{ "find", findValue },
|
||||||
|
{ "replacement", replacementValue }
|
||||||
|
});
|
||||||
|
return replaceDoc.ToJson(UtilMethods.GetJsonWriterSettings());
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Length(MethodCallExpressionModel model)
|
||||||
|
{
|
||||||
|
// 字符串长度,MongoDB $strLenBytes 操作符
|
||||||
|
var item = model.Args[0].MemberValue ?? model.DataObject;
|
||||||
|
BsonValue memberName = new ExpressionVisitor(context).Visit(item as Expression);
|
||||||
|
var lengthDoc = new BsonDocument("$strLenBytes", $"${memberName}");
|
||||||
|
return lengthDoc.ToJson(UtilMethods.GetJsonWriterSettings());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public override string IsNullOrEmpty(MethodCallExpressionModel model)
|
||||||
|
{
|
||||||
|
// 判断字符串是否为 null 或空字符串
|
||||||
|
var item = model.Args[0].MemberValue ?? model.DataObject;
|
||||||
|
BsonValue memberName = new ExpressionVisitor(context).Visit(item as Expression);
|
||||||
|
// $or: [ { $eq: [ "$field", null ] }, { $eq: [ "$field", "" ] } ]
|
||||||
|
var orDoc = new BsonDocument("$or", new BsonArray
|
||||||
|
{
|
||||||
|
new BsonDocument("$eq", new BsonArray { $"${memberName}", BsonNull.Value }),
|
||||||
|
new BsonDocument("$eq", new BsonArray { $"${memberName}", "" })
|
||||||
|
});
|
||||||
|
return orDoc.ToJson(UtilMethods.GetJsonWriterSettings());
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Trim(MethodCallExpressionModel model)
|
||||||
|
{
|
||||||
|
// 去除首尾空格,MongoDB $trim 操作符
|
||||||
|
var item = model.Args[0].MemberValue ?? model.DataObject;
|
||||||
|
BsonValue memberName = new ExpressionVisitor(context).Visit(item as Expression);
|
||||||
|
var trimDoc = new BsonDocument("$trim", new BsonDocument { { "input", $"${memberName}" } });
|
||||||
|
return trimDoc.ToJson(UtilMethods.GetJsonWriterSettings());
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Helper
|
||||||
|
|
||||||
// Existing methods...
|
// Existing methods...
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user