簡體   English   中英

MapReduce輸出C#讀取mongoDB

[英]MapReduce output C# reading mongoDB

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}

從輸出集合讀取對象的方法是什么?

有了輸出集合后,就可以像其他任何集合一樣對其進行查詢。 但是,由於結構不同,您將無法使用相同的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);

希望這可以幫助。

通過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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM