在我的域层中,我有以下两个实体用于mongodb集合
public class League
{
public ObjectId Id { get; set; }
public string LeagueName { get; set; }
public List<ObjectId> Teams { get; set; }
}
public class Team
{
public ObjectId Id { get; set; }
public string UserId { get; set; }
public string Teamname { get; set; }
public int Rating { get; set; }
}
服务层
private static IEnumerable<ObjectId> GetTeamsNotInSeason(Season season, IEnumerable<Team> teams )
{
var teamsInSeason = season.Leagues.Where(x => x.Teams != null).SelectMany(x => x.Teams).ToList();
return teams.OrderByDescending(x => x.Rating).Select(x => x.Id).Except(teamsInSeason);
}
所以每个联盟都有一个团队列表,引用使用ObjectId。但这意味着在我的服务层中它需要了解ObjectId,因此我必须在那里有一个mongoDb引用。所以我的问题是,你是否必须将关系引用存储为一种ObjectId,mongodb中关系的正常标准是什么?在c#中
答案 0 :(得分:2)
Yoe需要首先分析你将要在数据库中写入的内容。
一些基本规则:
如果您执行的读取次数多于写入次数,则尽可能多地嵌入,这将提高读取性能并允许在一次调用数据库时读取数据。嵌入与否的选择通常取决于数据如何增长,随时间变化以及如何查询数据。
考虑快速查询数据的非规范化,有时在其他集合上重复的名称并不是那么糟糕,只要你避免对数据库进行多次查询。
其他说明:
非规范化总是会给写入增加一些开销,但会提高读取速度。对于你的情况,我假设读取的次数多于写入次数和大量使用的非规范化。
当读取数据时考虑在不需要它时从对象中排除字段,使用linq对c#进行不正确的操作但是对于这个特定问题有一些解决方法,所以请注意它。
修改强> 如果你计划有更多的读数而不是写作,那么你可以拥有一个包含所有imofrmation的集合。
public class League
{
public ObjectId Id { get; set; }
public string LeagueName { get; set; }
public List<Team> Teams { get; set; }
}
修改强>
在对象之间创建引用的最佳数据类型是 ObjectId ,但是如果您没有查看它,我会很高兴您检查数据modeling的方案