gpt4 book ai didi

c# - MongoDB - 在 C# 中映射 map-reduce 集合

转载 作者:可可西里 更新时间:2023-11-01 09:32:31 26 4
gpt4 key购买 nike

我正在运行一个 map reduce 作业,将结果数据转储到一个集合中,“products”集合中的元素如下所示(该结构由 Mongo 生成,我不知道它是否可以控制):

{
"_id" : { "ProductId" : "1:000001", "ProductTitle" : "Some product with ID 1:000001" },
"value" : { "TotalImpressions" : 3, "TotalClicks" : 40 }
}

理想情况下,我想将每个条目映射到以下平面对象:

public class Product 
{
public string ProductId { get; set; }
public string ProductTitle { get; set; }
public int TotalImpressions { get; set; }
}

这显然不起作用,因为序列化程序在根级别查找属性“id”和“value”,而这些属性在该类中不存在。我的解决方法是在对象出现时对其进行建模,例如:

public class ProductRow
{
/* implementation of these objects excluded, but they just reflect the json objects */
public ProductIdentifier Id { get; set; }
public Product value { get; set; }
}

map 很好,但是有点冗长,我宁愿避免所有这些额外的对象。

是否可以配置 BSON 反序列化器以支持此映射?我查看了文档,但没有看到任何明显的解决方案。

注意:我受限于 .NET 3.5 的工作环境,所以在考虑答案时请记住这一点。

最佳答案

您可以轻松地自己进行反序列化(如 @Avish 所建议的那样),因此这里是针对您的案例的完整示例:

var mongoServer = MongoServer.Create("mongodb://localhost:27020");
var database = mongoServer.GetDatabase("StackoverflowExamples");
var products = database.GetCollection("products");

var result = new Product();

var item = products.FindOne();
var id = item["_id"].ToBsonDocument();
var value = item["value"].ToBsonDocument();

result.ProductId = id["ProductId"].AsString;
result.ProductTitle = id["ProductTitle"].AsString;
result.TotalImpressions = value["TotalImpressions"].AsInt32;

关于c# - MongoDB - 在 C# 中映射 map-reduce 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6492110/

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