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; }
}
我正在开展一个项目,其中 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; }
}