我們正在從較早版本的mongo驅動程序更新到2.x驅動程序。我試圖更新我們之前的一些代碼,但我正在努力研究如何。帶有MongoDB C#驅動程序的片(投影)派生類'陣列(v2.4)
我們的階級結構是有點像這樣:
public class BaseClass
{
public string Name { get; set; }
}
public class DerivedClass : BaseClass
{
public IEnumerable<DataClass> Items { get; set; }
}
public class DataClass
{
public string Element1 { get; set; }
public string Element2 { get; set; }
}
隨着舊的驅動程序,我們有這樣的代碼:
var result = collection
.Find(query)
.SetLimit(10)
.SetFields(Fields.Slice("Items", 0, 1));
並用新的,我們有這樣的代碼:
var result = collection
.Find(query)
.Limit(10)
.Project<BaseClass>(...);
在我們的例子中,數據表示用戶評論,可以有兩種類型。我們的query
對象是處理分頁的代碼。對於派生類型,我只想返回Items數組中的第一個元素。我們需要將所有匹配的註釋返回到一起。
我面臨的問題是Project
是靜態類型,因此預計Builders<BaseClass>.Projection.___
。 IFindFluent<BaseClass, BaseClass>
有一個As<T>
選項,但預計的預測是ProjectionDefinition<BaseClass, DerivedClass>
,我看不到任何方式創建這樣的定義對象 - 即使在簡要地查看Mongo驅動程序之後。
有沒有簡單的方法來做到這一點?
不知道爲什麼有人低估了這一點。如果老的蒙戈司機不能做到這一點,你不會真的期望新手能夠突然變得可能。 – john