Meteor:为集合服务器端创建筛选器,并将其存储在本地集合中.好主意
Meteor: Create filters for a collection server side and store them in a local collection. Good idea?
我们有相当多的文档集,我们希望我们的用户能够查看和过滤。为了加快速度,我们只向客户发送有限数量的文档。但是,由于我们确实需要客户端能够过滤文档,因此我们需要一种方法来发送它们可以过滤的键和值。根据客户选择的过滤器,我们为文档创建查询。例如,假设我们有两个这样的文档:
{标签: ['foo'], 用户: 'Ken'}{标签: ['酒吧', '巴兹'], 用户: '芭比'}
在这种情况下,客户端应该看到标签可以在foo,bar和baz上过滤,而用户可以在Ken和Barbie上过滤。由于过滤器只是文档中数据的聚合,我不想为过滤器创建集合并将其存储在数据库中。相反,我一直在玩使用
var Filters = new Meteor.Collection(空)
在出版物内。我查询要为其创建筛选器的所有文档,然后将筛选器插入到 Filters 集合中。在过滤器集合上使用 .observe ,我在添加过滤器时将过滤器发送到客户端。
这样做的结果是每个客户端在服务器上创建一个 Filters 集合。假设每个集合都包含大约 50-400 个过滤器,例如 {tag: 'foo', count: 3}。 对我来说,这听起来好像在不耗尽服务器内存的情况下应该没问题,但我不是计算机科学家。如能就此提供任何意见,将不胜感激。
如果您对如何在服务器上创建过滤器有任何其他想法,那也很有趣。
谢谢!
如何使用字段说明符仅使用筛选器字段发布整个集合?这样,它就像一个只有过滤器的额外集合,在结果中,您可以选择仅显示不仅具有tag
字段的文档。
然而,在我看来,一个更好的主意是做一些类似于穆罕默德的建议,并使事情正常化一点。具有包含标记名称和 ID 的单独 Tags 集合,并具有存储标记 ID 和用户 ID 的 TagsUsers 连接。这将使筛选变得更加容易,因为这样您只需将标记集合发布到客户端,只需添加/删除/编辑标记一次,并且可以轻松地筛选服务器上的发布方法。
// Server publish method
// Return just users that the client has filtered
Meteor.publish('users', function (tagIds) { // tags is an array of tag ids ['foo', 'baz']
var userIds = TagsUsers.find({ tagId: { $in: tagIds } }).map(function (connector) {
return connector.userId;
});
return Users.find({ _id: {$in: userIds } });
});
// Client subscribe method
Meteor.subscribe('users', Session.get('tag-filters'));
注意:这最初是在CodersClan 上回答的
- 更改本地存储集合的名称
- 主干本地存储模型和集合
- 如何使用Meteor将列表中每一行的列值存储到集合中
- 主干:将集合存储在模型中
- 将数据存储在模型&集合呼叫&取来
- Meteor:为集合服务器端创建筛选器,并将其存储在本地集合中.好主意
- 集合中的主干模型数据未保存到本地存储
- 将图像从HTML中的输入和使用javascript存储到mongodb中的集合中
- 你能存储对 mongo 集合的引用吗?
- 循环(将项目存储在集合中)似乎迭代的次数比它应该的次数少
- jsFiddle用于存储大量脚本集合的替代方案
- 如何存储标签从引导标签输入字段到我的集合…
- 存储元素的动态集合
- 在另一个集合中存储引用会创建对象,但不会创建字符串Meteor
- 将具有唯一id的对象集合存储为以id作为键的关联数组,而不是作为常规数组,是否存在缺陷?
- 存储集合的集合而不是模型的集合
- 如何存储“集合”包括本地存储中的所有模型?(backbone.js)
- 在页面重新加载后,从本地存储检索复选框集合的已保存状态
- 在哪里/如何存储数据集合
- Javascript或Jquery存储项目集合