Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何保存/传递MongoDB UpdateDefinition以供记录和以后使用?_C#_Mongodb_Mongodb Query_Azure Cosmosdb - Fatal编程技术网

C# 如何保存/传递MongoDB UpdateDefinition以供记录和以后使用?

C# 如何保存/传递MongoDB UpdateDefinition以供记录和以后使用?,c#,mongodb,mongodb-query,azure-cosmosdb,C#,Mongodb,Mongodb Query,Azure Cosmosdb,关于如何保存/传递MongoDB UpdateDefinition以用于日志记录和以后使用,我被难住了 我已经在Azure中为MongoDB创建了一些通用函数,用于获取、插入、删除和更新的集合,这些函数运行良好 目的是能够有一种标准的、预配置的方式与集合交互。特别是对于更新,目标是能够灵活地传入适当的UpdateDefinition,其中业务逻辑在别处完成并传入 我可以创建/更新/设置/组合UpdateDefinition本身,但当我尝试通过序列化它来记录它时,它会显示null: JsonCon

关于如何保存/传递MongoDB UpdateDefinition以用于日志记录和以后使用,我被难住了

我已经在Azure中为MongoDB创建了一些通用函数,用于获取、插入、删除和更新的集合,这些函数运行良好

目的是能够有一种标准的、预配置的方式与集合交互。特别是对于更新,目标是能够灵活地传入适当的UpdateDefinition,其中业务逻辑在别处完成并传入

我可以创建/更新/设置/组合UpdateDefinition本身,但当我尝试通过序列化它来记录它时,它会显示null:

JsonConvert.SerializeObject(updateDef)
当我尝试记录它、将它保存到另一个类或将它传递到另一个函数时,它会显示null:

public class Account
    {
        [BsonElement("AccountId")]
        public int    AccountId     { get; set; }
        [BsonElement("Email")]
        public string Email         { get; set; }
    }

var updateBuilder = Builders<Account>.Update;
var updates = new List<UpdateDefinition<Account>>();

//just using one update here for brevity - purpose is there could be 1:many depending on fields updated
updates.Add(updateBuilder.Set(a => a.Email, email));

//Once all the logic and field update determinations are made
var updateDef = updateBuilder.Combine(updates);

//The updateDef does not serialize to string, it displays null when logging.
_logger.LogInformation("{0} - Update Definition: {1}", actionName, JsonConvert.SerializeObject(updateDef));

//Class Created for passing the Account Update Information for Use by update function
public class AccountUpdateInfo
    {
        [BsonElement("AccountId")]
        public int                          AccountId   { get; set; }
        [BsonElement("Update")]
        public UpdateDefinition<Account>    UpdateDef   { get; set; }
    }

var acct = new AccountUpdateInfo();
acctInfo.UpdateDef = updateDef

//This also logs a null value for the Update Definition field when the class is serialized.
_logger.LogInformation("{0} - AccountUpdateInfo: {1}", actionName, JsonConvert.SerializeObject(acct));

公共类帐户
{
[BsonElement(“AccountId”)]
public int AccountId{get;set;}
[b单一元素(“电子邮件”)]
公共字符串电子邮件{get;set;}
}
var updateBuilder=Builders.Update;
var updates=新列表();
//为了简洁起见,这里只使用一个更新-目的是根据更新的字段,可能会有1:多个更新
Add(updateBuilder.Set(a=>a.Email,Email));
//完成所有逻辑和字段更新确定后
var updatedf=updateBuilder.Combine(更新);
//updateDef未序列化为字符串,它在日志记录时显示null。
_logger.LogInformation(“{0}-更新定义:{1}”,actionName,JsonConvert.SerializeObject(updateDef));
//为传递帐户更新信息以供更新函数使用而创建的类
公共类AccountUpdateInfo
{
[BsonElement(“AccountId”)]
public int AccountId{get;set;}
[b单一元素(“更新”)]
public UpdateDefinition UpdateDef{get;set;}
}
var acct=new AccountUpdateInfo();
acctInfo.UpdateDef=UpdateDef
//在序列化类时,这还会记录更新定义字段的空值。
_logger.LogInformation(“{0}-AccountUpdateInfo:{1}”,actionName,JsonConvert.SerializeObject(acct));
对正在发生的事情有什么想法或想法吗?我被难住了,为什么我不能像我期望的那样序列化日志或在类中传递值试试看:

var json=updatedf.Render(
BsonSerializer.SerializerRegistry.GetSerializer(),
BsonSerializer.SerializerRegistry)
.ASB文件
.ToString();
要将json字符串转换回更新定义(使用隐式运算符),可以执行以下操作:

UpdateDefinition updateDef=json;

这是我脑子里想不出来的,没有经过测试。我唯一不确定(没有IDE)的是上面的
.Document.ToString()
部分。

什么“显示空值”?哪里你试过调试它吗?请发布。如果UpdateDefinition没有立即被UpdateOneAsync(筛选器,更新)使用,则该值将丢失记录时的值。我已经添加/更新了两条日志语句,在这两条语句中,当序列化日志时,它会记录一个空值。当尝试将UpdateDefinition序列化为用于日志记录的字符串时,可以直接使用。第二个问题是当试图序列化一个具有日志记录值的类时。为什么会有人否决这个问题?这是一个完全合理和合法的问题,如果很明显,他们应该给出一个答案。感谢您尝试登录。太棒了!!这对于能够将UpdateDefinition作为字符串记录的第一部分来说非常有用。非常感谢。从你的头顶上看,真是令人印象深刻。唯一需要更改的是我将“.Document”替换为“.AsBsonDocument”以使其正常工作。对于第二部分,我将看看是否可以在函数之间传递json字符串值,因为UpdateDefinition本身无法传递,并且使用了您列出的相反方式。第二部分,传递json字符串,与UpdateDefinition相反,它本身工作得非常好!当需要进行更新时,能够完全按照指定将其设置为UpdateDefinition。仍然不知道为什么他更新了定义本身却未能传递出去。我知道把绳子传来传去是件麻烦事,但它确实有用,而且有意义。谢谢你@c#mongo司机drewid是一台相当复杂的机器。我已经和它斗争了一年多了,试图在它上面建立一个新的平台,我想有些东西一直在困扰着我:-)