MongoDb relationship

本文关键字:relationship MongoDb | 更新日期: 2023-09-27 18:22:34

在我的域层中,我有以下两个用于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);
    }

因此,每个联盟都有一个团队列表,引用use ObjectId。但这意味着在我的服务层中,它需要了解ObjectId,因此我必须在其中有一个mongoDb引用。所以我的问题是,你必须将关系引用存储为ObjectId类型吗?mongodb中关系的正常标准是什么?在c#内

MongoDb relationship

您需要首先分析数据库中的读取和写入。

一些基本规则:

如果您执行的读取比写入多,那么就尽可能多地嵌入,这将提高读取性能,并允许在对数据库的一次调用中读取数据。嵌入与否的选择通常取决于数据将如何增长、随时间变化以及如何查询

考虑对数据进行去规范化以进行快速查询,有时其他集合上的重复名称也没那么糟糕,只要避免对数据库进行多次查询即可。

其他注意事项:

非规范化总是会给写入增加一些开销,但会提高读取速度。对于您的情况,我认为读取将多于写入,并且大量使用非规范化。

当读取数据时,考虑在不需要的情况下从对象中排除字段,使用linq的c#上的项目工作不太好,但对于这个特定的问题有一些解决方法,所以请注意。

编辑:如果你计划读得比写得多,那么你可能可以拥有一个包含所有信息的单一集合。

public class League
{
    public ObjectId Id { get; set; }
    public string LeagueName { get; set; }
    public List<Team> Teams { get; set; }
}

编辑:

在对象之间创建引用的最佳数据类型是ObjectId,但是,如果您还没有看过数据建模的escenarios,我很乐意为您检查它。