我正在运行一个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工作环境的限制,所以在考虑答案时请记住这一点。
答案 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;