Update mongodb

This commit is contained in:
sunkaixuan
2025-05-08 20:36:10 +08:00
parent 2467211036
commit 5d0996d8ad
3 changed files with 60 additions and 11 deletions

View File

@@ -40,8 +40,8 @@ namespace MongoDbTest
var updateRow3= db.Updateable<OrderInfo>() var updateRow3= db.Updateable<OrderInfo>()
.SetColumns(it=>it.Name=="aa") .SetColumns(it=>it.Name=="xx")
.Where(it=>it.Id==ids.Last()) .Where(it=> it.Id == ids.Last())
.ExecuteCommand(); .ExecuteCommand();
var delrow = db.Deleteable(new OrderInfo() { Id = ids.Last() }) var delrow = db.Deleteable(new OrderInfo() { Id = ids.Last() })

View File

@@ -3,6 +3,7 @@ using MongoDB.Driver;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions; using System.Linq.Expressions;
using System.Text; using System.Text;
@@ -84,11 +85,48 @@ namespace SqlSugar.MongoDbCore
_ => throw new NotSupportedException($"Unsupported binary op: {expr.NodeType}") _ => throw new NotSupportedException($"Unsupported binary op: {expr.NodeType}")
}; };
if (op == null && leftIsMember && !rightIsMember)
return new BsonDocument { { field.ToString(), value } };
else if (op == null && rightIsMember && !leftIsMember)
return new BsonDocument { { value.ToString(), field } };
string leftValue = "";
BsonValue rightValue = "";
if (IsLeftValue(leftIsMember, rightIsMember, op)|| IsRightValue(leftIsMember, rightIsMember, op))
{
MemberExpression expression;
if (IsLeftValue(leftIsMember, rightIsMember, op))
{
leftValue = field.ToString();
rightValue = value;
expression = expr.Left as MemberExpression;
}
else
{
leftValue = value.ToString();
rightValue = field;
expression = expr.Right as MemberExpression;
}
if (expression != null)
{
if (expression.Expression is ParameterExpression parameter)
{
if (_context.context != null)
{
var entityInfo = _context.context.EntityMaintenance.GetEntityInfo(parameter.Type);
var columnInfo = entityInfo.Columns.FirstOrDefault(s => s.PropertyName == leftValue);
if (columnInfo != null)
{
leftValue = columnInfo.DbColumnName;
if (columnInfo.IsPrimarykey)
{
rightValue = BsonValue.Create(ObjectId.Parse(value + ""));
}
}
}
}
}
return new BsonDocument { { leftValue, rightValue } };
}
else
{
return new BsonDocument return new BsonDocument
{ {
{ field.ToString(), new BsonDocument { { op, value } } } { field.ToString(), new BsonDocument { { op, value } } }
@@ -96,4 +134,15 @@ namespace SqlSugar.MongoDbCore
} }
} }
private static bool IsRightValue(bool leftIsMember, bool rightIsMember, string op)
{
return op == null && rightIsMember && !leftIsMember;
}
private static bool IsLeftValue(bool leftIsMember, bool rightIsMember, string op)
{
return op == null && leftIsMember && !rightIsMember;
}
}
} }

View File

@@ -12,7 +12,7 @@ namespace SqlSugar.MongoDb
{ {
var context = new MongoNestedTranslatorContext(); var context = new MongoNestedTranslatorContext();
context.resolveType = resolveType; context.resolveType = resolveType;
context.context = this.Context; context.context = this.SugarContext.Context;
var sql=MongoNestedTranslator.Translate(expression, context); var sql=MongoNestedTranslator.Translate(expression, context);
var shellString = sql.ToJson(new JsonWriterSettings var shellString = sql.ToJson(new JsonWriterSettings
{ {