MongoDB模式用于职位和股票



我是MongoDB nosql 概念的新手,并粘在我无法决定最能实现我目的的模型的地方。

我需要以这样的方式设计架构,以使我的最终结果为帖子和分享按时间排序。为此,我考虑了两个选择:


选项1:帖子的不同集合和共享 as:

post Collection 的模式:

var postSchema = mongoose.Schema({
   postText: String,
   postedBy: String, 
   privacy: Number,
   updatedOn: { type: Date, default: Date.now }        
}, { collection: 'posts' }); 

共享集合的模式

var shareSchema = mongoose.Schema({
   dis_Id: { type: mongoose.Schema.Types.ObjectId }, // Id of post that is shared
   shareBy: { type: mongoose.Schema.Types.ObjectId },
   shareText: String,
   share_privacy: Number,
   shareOn: { type: Date, default: Date.now }
}, { collection: 'shares' });

选项2:嵌入帖子本身中的共享

post

的新架构
var postSchema = mongoose.Schema({
  postText: String,
  postedBy: String,
  updatedOn: { type: Date, default: Date.now }, 
  privacy: Number,
  share: {
    shareBy: { type: mongoose.Schema.Types.ObjectId },
    shareText: String, 
    share_privacy: Number,
    shareOn: { type: Date } 
  }       
}, { collection: 'posts' });

现在哪一种可能是一个更好的选择?选项1在查询方面存在问题,因为MongoDB中没有加入,并且选项2将导致相同数据的复制,并且可以为成千上万的用户增长多达数十亿多个。

好。我建议采用以下方法:

  1. 由于您已经具有用户名,因此可以使用排序以排序的顺序检索与该ID相对应的帖子列表。

  2. 在每个帖子上迭代,您可以使用上面使用的相同类型以排序顺序获取共享。

这里的关键是了解您要设置的索引。我建议您应该有以下索引。

postrongchema:{用户名,UpdatedOn}

上的复合索引

share_schema:{dis_id,shareon}上的复合索引。

如果未使用化合物索引,则您的应用程序不会扩展大量记录。

好吧,当您将所有必需的数据放在一起时,很容易使用嵌入式文档,因此在这种情况下,选项2很好。但是,如果您担心文档的大小增加了更多的16MB,则使用选项1。在这种情况下,请不要使用骨料查询加入两个集合跳过操作。相反,您应该单独查询每个集合,并使用一些自定义逻辑创建一个完整的响应。

相关内容

  • 没有找到相关文章

最新更新