gpt4 book ai didi

c# - 如何从 MongoDB 文档中字典中的对象检索属性?

转载 作者:可可西里 更新时间:2023-11-01 09:51:35 27 4
gpt4 key购买 nike

我们的 Mongo 数据如下所示:

{
"_id" : ObjectId("542d881b8bc641bbee1f8509"),
"ExtendedProperties" : {
"Context" : {
"_t" : "LoggingContext",
"DeclaringTypeName" : "EndpointConfig"
}
}
}

在C#代码中,ExtendedProperties表示如下:

public class LogEntry
{
public IDictionary<string, object> ExtendedProperties { get; set; }
}

我已经尝试了所有我能找到的方法来查询 DeclaringTypeName 的值。似乎没有任何效果,如以下代码所示:

// This throws an UnsupportedOperationException with the following message:
// Unable to determine the serialization information for the expression: (LogEntry e) => e.ExtendedProperties.get_Item("DeclaringTypeName").ToString().
query.Add(Query<LogEntry>.EQ(e => ((LoggingContext)e.ExtendedProperties["Context"]), this.DeclaringTypeName ));

// This returns zero matching rows:
query.Add(Query.EQ("ExtendedProperties.Context.DeclaringTypeName", this.DeclaringTypeName));

// This returns zero matching rows:
query.Add(Query.ElemMatch("ExtendedProperties.Context", Query.EQ("DeclaringTypeName", this.DeclaringTypeName)));

// This reports that ExtendedProperties must implement a specific interface and must not return null:
query.Add(Query<LogEntry>.ElemMatch(e => e.ExtendedProperties, qb => Query.EQ("Context.DeclaringTypeName", this.DeclaringTypeName)));

为清楚起见,我研究了我能找到的每个 StackOverflow、CodePlex 和 Mongo.org 线程,但目前仍无法正确解决此问题。

自然地,这将是我做错的事情。

有人请给我一根骨头。

最佳答案

我将 LogEntry 类定义为

public class LogEntry
{
public ObjectId Id { get; set; }
public IDictionary<string, object> ExtendedProperties { get; set; }
}

然后我插入示例文档

var log = new LogEntry
{
ExtendedProperties = new Dictionary<string, object>
{
{
"Context", new LoggingContext
{
DeclaringTypeName = "EndpointConfig"
}
}
}
};

collection.Insert(log);

然后我通过以下方式执行查询:

var rawQuery = Query.EQ("ExtendedProperties.Context.DeclaringTypeName", "EndpointConfig");
var query = new List<IMongoQuery>();
query.Add(rawQuery);

var rawResult = collection.Find(rawQuery).ToList();

查询将在查询下方发送mongo

db.messages.find({ "ExtendedProperties.Context.DeclaringTypeName" : "EndpointConfig" })

我得到了结果

关于c# - 如何从 MongoDB 文档中字典中的对象检索属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27452522/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com