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 (キーは 2 つのフィールドの組み合わせとして構築される) の後、出力コレクションの構造はわずかに変更されます。何かのようなもの

"_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 に答える