2
我試圖做一個多領域的「獨特」的查詢,這當然是不可能的
(見我試圖在這裏:Selecting a new type from linq query)使用蒙戈DB。集團與C#司機
繼我實現這個,我發現我能夠通過使用.group和MongoDB來檢索我需要的數據。
在MongoDB C#包裝中有沒有使用下面的查詢/命令的方法?
disciplines = db.result.group({
key: {DisciplineName:1, DisciplineCode:1},
reduce: function(obj, prev) { if (!obj.hasOwnProperty("DisciplineName")) {
prev.DisciplineName = obj.DisciplineName;
prev.DisciplineCode = obj.DisciplineCode;
}},
initial: { }
});
我Result
類(文件)看起來像:
var initial = new BsonDocument();
//return a list of keys for the group
var keyFunction = (BsonJavaScript)@"function(doc) {
return {
DisciplineName : doc.DisciplineName,
DisciplineCode: doc.DisciplineCode
};
}";
var reduce = @"function(obj, prev) {
if (!obj.hasOwnProperty(""DisciplineName"")) {
prev.DisciplineName = obj.DisciplineName;
prev.DisciplineCode = obj.DisciplineCode;
}
}";
var bsonDocs = _db.GetCollection("result").Group(Query.Exists("DisciplineName"), keyFunction, initial, reduce, null).ToArray();
//I hate this!!
var disciplines = new List<Discipline>();
foreach (var item in bsonDocs)
disciplines.Add(BsonSerializer.Deserialize<Discipline>(item));
我真的unfond的方式,我必須遍歷IEnumerable<BsonDocument>
連載:
public class Result
{
public virtual int ResultId { get; set; }
public virtual string DisciplineCode { get; set; }
public virtual string DisciplineName { get; set; }
public virtual int CompetitorId { get; set; }
//other stuff
}
的集合記住的Map/Reduce是不是建立實時查詢。它非常緩慢,並且在使用中有其他一些影響。更好的方法是有一個單獨的集合,其中包含預先計算的這些結果。 – 2012-07-09 12:23:01
我意識到..但在我的領域這個單獨的集合將是一個相當痛苦。我打算將上面的map/reduce的結果無限期地緩存幾個小時(直到Result集合每晚更新) – Alex 2012-07-09 13:02:52