首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在哪里存储用户跟随者/追随者?用户的下列文件收集?Fat文件与。多态文档

在哪里存储用户跟随者/追随者?用户的下列文件收集?Fat文件与。多态文档
EN

Stack Overflow用户
提问于 2015-01-21 09:55:31
回答 2查看 460关注 0票数 3

我说的是:

代码语言:javascript
运行
复制
Meteor.users.findOne() =
{
  _id: "..."
  ...
  followers: {
    users: Array[], // ["someUserId1", "someUserId2"]
    pages: Array[]  // ["somePageId1", "somePageId2"]
  }
}

代码语言:javascript
运行
复制
Followings.findOne() =
{
  _id: "..."
  followeeId: "..."
  followeeType: "user"
  followerId: "..."
}

我发现第二个完全没有效率,因为我需要使用smartPublish来发布用户的追随者。

代码语言:javascript
运行
复制
Meteor.smartPublish('userFollowers', function(userId) {
  var coursors = [],
      followings = Followings.find({followeeId: userId});
  followings.forEach(function(following) {
    coursors.push(Meteor.users.find({_id: following.followerId}));
  });
  return coursors;
});

我不能在铁路由器里过滤用户。我缓存订阅,这样可能会有比我需要的更多的用户。

我想做这样的事:

代码语言:javascript
运行
复制
data: function() {
  return {
    users: Meteor.users.find({_id: {$in: Meteor.user().followers.users}})
  };
},

在文档中使用嵌套数组的一个坏处是,如果我向followers.users[]添加了一个项,整个数组将被发送回客户端。

你怎么看?把这样的数据保存在用户文档中,这样它就会变胖,这更好吗?也许这是解决这些问题的一种“流星方式”。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-21 21:08:59

我认为最好将其嵌套在用户文档中。将其存储在单独的集合中会导致大量不必要的重复,每次运行发布函数时,您都必须再次扫描整个集合。如果您担心数组太大,在大多数情况下,不要(通常,一本全文小说只需要几百kb)。另外,如果您已经发布了用户文档,则不必将任何新文档拖到内存中;您已经拥有了所需的一切。

这个MongoDB博客文章似乎提倡类似的方法(请参阅一对多的部分)。也许值得一看。

票数 1
EN

Stack Overflow用户

发布于 2015-01-21 15:50:30

你似乎知道每一种选择的利弊。不幸的是,你的问题大多是基于意见的。

通常,如果跟随者数组的大小很小,并且不会经常更改,请将它们嵌入其中。

否则,一个专门的集合是要走的路。

对于这种情况,您可能需要看一看https://atmospherejs.com/cottz/publish,它在所做的事情上似乎非常有效,并且在语法上非常容易实现。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28064168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档