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

时间:2011-06-27 11:25:18

标签: c# .net-3.5 mongodb mongodb-.net-driver

我正在运行一个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; }
}

哪个地图很好,但是它有点冗长,我宁愿避免拥有所有这些额外的物品。

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

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

1 个答案:

答案 0 :(得分:3)

您可以自己轻松地进行反序列化(建议使用 @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;