2
public class myType
{
public int key1;
public int key2;
public int val1;
public int val2;
public int val3;
};

当我将myType对象插入集合时,阅读没有问题。只是:

collection.FindAs<myType>(query);

获取对象:

"key1":key1, "key2":key2, "val1":val1, "val2":val2, "val3":val3

但是在 mapreduce(键被构造为两个字段的组合)之后,输出集合的结构略有修改。就像是

"_id" {"key1" : key1, "key2": key2}, "value" : {"val1":val1, "val2":val2, "val3":val3}

从输出集合中读取对象的方法是什么?

4

2 回答 2

3

拥有输出集合后,您可以像查询任何其他集合一样查询它。但是,由于结构不同,您将无法使用相同的 C# 类来执行此操作。因此,您要么需要将其作为 BsonDocument 阅读,要么创建几个新类,如下所示:

public class Keys
{
  [BsonElement("key1")]
  public int Key1;
  [BsonElement("key2")]
  public int key2;
}

public class values
{
  [BsonElement("val1")]
  public int Val1;
  [BsonElement("val1")]
  public int Val2;
  [BsonElement("val1")]
  public int Val3;
}

public class MapReduceOutput
{
  [BsonId]
  public Keys Keys;
  [BsonElement("values")]
  public Values Values;
}

然后你可以这样做:

collection.FindAs<MapReduceOutput>(query);

希望这可以帮助。

于 2012-05-10T17:06:31.500 回答
1

对每个通过 m/r 结果来说都很简单,应该可以快速工作(至少比自动反序列化更快):

var result = RunMapReduce(..);
foreach (var item in result.InlineResults)
{
   var id = item["_id"].AsBsonDocument;
   var value = item["value"].AsBsonDocument;

   var obj = new myType();
   obj.key1 = id["key1"].AsInt32;
   //and so on
}
于 2012-05-10T07:40:07.507 回答