[英]Mapping subclasses / embedded to single flat document with MongoDB C# driver
我正在開發一個應用程序,該應用程序具有使用競賽結果/時間等的模型。
我有一個看起來像這樣的模型:
public class Competitor
{
public int ID { get; set; }
public string Name { get; set; }
public DateTime DateOfBirth { get; set; }
}
public class Event
{
public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
public class Result
{
public int ID { get; set; }
public decimal ResultTime { get; set; }
public Competitor Competitor { get; set; }
public Event Event { get; set; }
}
我打算將其展平以存儲到mongo db中,如下所示:
public class ResultSchemaExample
{
public int CompetitorID { get; set; }
public string CompetitorName { get; set; }
public DateTime CompetitorDateOfBirth{ get; set; }
public int EventID { get; set; }
public string EventName { get; set; }
public string EventDescription { get; set; }
public int ResultID { get; set; }
public decimal ResultTime { get; set; }
}
我擔心的是,這會使查詢變得更加困難嗎?
有沒有一種方法可以使classMap變得更簡單?
因此,我可以執行以下查詢:
var query =
collection.AsQueryable<Result>()
.Where(r => r.Name == "Alex");
它會查詢我的基礎,平坦(非嵌入式)數據以返回Result實例嗎?
這可能嗎?
還是我應該在整個應用程序中使用ResultSchemaExample?
您總是可以擁有這樣的合成類,並將其存儲在mongodb中。
public class RaceResults
{
public Competitor Competitor { get; set;}
public Event Event { get; set;}
public Result Result { get; set;}
}
您的查詢將如下所示:
var query = collection.AsQueryable<RaceResults>().Where(r => r.Result.Name == "Alex");
但是,我可能會建議完全使用另一種模式...從您的域開始,我確定有一條規則規定,如果沒有事件,您將無法獲得結果。 那會使我設計您的域略有不同; 更像這樣:
public class Event
{
public string Name { get; set; }
public string Description { get; set; }
public IList<Result> Results { get; set; }
}
public class Result
{
public Competitor Competitor { get; set; }
public TimeSpan ResultTime { get; set; }
}
public class Competitor
{ ... }
使用這種模式,mongodb:events中將只有1個集合。 每個事件將包含其所需的所有數據。 在所有事件之間關聯競爭對手的結果也將非常簡單,因為mongodb支持在數組和文檔內部進行查詢。 因此,以下查詢將獲得競爭對手42競爭的所有事件:
var collection = db.GetCollection<Event>("events");
var query = Query.EQ("Results.Competitor.Id", 42);
var events = collection.Find(query);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.