C# mongodb 类似 Facebook 的模型

C# mongodb model like Facebook

我正在开展一个项目,其中 MongoDB 模型将类似于 Facebook。所以我们都知道 FB 是如何工作的,一个用户 "likes" 一个 band/company 页面,并且该用户将看到该页面上的所有帖子。

下面这个模型我应该怎么设计呢? 如果一个 Page 有百万个 likes,那么每个 Post 会有一百万个 Like[=21] 的子文档=].好像不太对啊,肯定有我想不到的更好的办法。

谢谢。

public class Person
{
    public ObjectId Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class Page
{
    public ObjectId Id { get; set; }
    public string Name { get; set; }
    public List<Like> PersonLikes { get; set; }

}
public class Like
{
    public ObjectId Id { get; set; }
    public ObjectId UserId { get; set; }
    public DateTime DateLiked { get; set; }
}

public class Post
{
    public ObjectId Id { get; set; }
    public ObjectId PageId { get; set; }
    public string Message { get; set; }
    public List<Like> PersonLikes { get; set; }
}

我假设你只想跟踪点赞数

public class Page
{
    public ObjectId Id { get; set; }
    public DateTimeOffset Date { get; set; }
    public string Name { get; set; }
    public int NumberOfLikes { get; set; }
}

public class Post
{
    public ObjectId Id { get; set; }
    public ObjectId PageId { get; set; }
    public DateTimeOffset Date { get; set; }
    public string Message { get; set; }
    public int NumberOfLikes { get; set; }
}

然后我会将反应(喜欢或不喜欢)排队等待插入,"sentiment" 信息不必实时存储,对吗?这些不是药物、银行交易等

public class Like
{
    public ObjectId Id { get; set; }
    public ObjectId ParentId { get; set;}
    public ObjectId UserId { get; set; }
    public DateTimeOffset Date { get; set; }
}

在哪里排队?到喜欢的集合。为什么不是页面的一部分或 post?因为如果 post 像病毒一样传播(如您所说,尽管大多数人不会),您最终可能会获得 1,000,000 个赞。除了分析引擎,谁会浏览这些信息?

您还必须确保用户对每个项目只能表达一次反应。

post 仅存在于一个页面上,因此应该拥有 post 的页面,而不是 post 拥有该页面的页面。

public class Person
{
    public ObjectId Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class Page
{
    public ObjectId Id { get; set; }
    public string Name { get; set; }
    public List<Like> PersonLikes { get; set; }
    public List<Post> Posts { get; set; }
}

public class Post
{
    public ObjectId Id { get; set; }
    public string Message { get; set; }
    public List<Like> Likes { get; set; }
}

public class Like
{
    public ObjectId Id { get; set; }
    public ObjectId UserId { get; set; }
    public DateTime DateLiked { get; set; }
}