MongoDb的关系

时间:2014-09-18 18:31:19

标签: c# mongodb

在我的域层中,我有以下两个实体用于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#中

1 个答案:

答案 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的方案