gpt4 book ai didi

javascript - Meteor:为收集服务器端创建过滤器并将它们存储在本地集合中。好主意?

转载 作者:行者123 更新时间:2023-11-29 22:07:58 30 4
gpt4 key购买 nike

我们有相当大的文档集,我们希望我们的用户能够查看和过滤这些文档。为了加快速度,我们只向客户发送有限数量的文件。但是,由于我们确实需要客户端能够过滤文档,因此我们需要一种方法来发送他们可以过滤的键和值。根据客户选择的过滤器,我们创建了一个文档查询。例如,我们有两个这样的文档:

{标签:['foo'],用户:'Ken'}{标签:['bar', 'baz'], 用户:'芭比'

在这种情况下,客户端应该看到可以在 foo、bar 和 baz 上过滤标签,而可以在 Ken 和 Barbie 上过滤用户。由于过滤器只是文档中数据的聚合,我不想为过滤器创建一个集合并将其存储在数据库中。相反,我一直在尝试使用

var Filters = new Meteor.Collection(null)

在出版物中。我查询要为其创建过滤器的所有文档,然后将过滤器插入到 Filters 集合中。在 Filters 集合上使用 .observe,我在添加过滤器时将它们发送给客户端。

这样做的结果是每个客户端都会在服务器上创建一个 Filters 集合。假设这些集合中的每一个都包含大约 50-400 个过滤器,例如 {tag: 'foo', count: 3}。对我来说,这听起来好像在不耗尽服务器内存的情况下应该没问题,但我不是计算机科学家。对此有任何意见将不胜感激。

如果您对如何在服务器上创建过滤器有任何其他想法,也会很有趣。

谢谢!

最佳答案

如何使用 field specifiers 发布仅包含过滤字段的整个集合? ?这样它就像一个只有过滤器的额外集合,在结果中您可以选择只显示不只有 tag 字段的文档。

不过,在我看来,更好的想法是按照 mohamed 的建议做一些类似的事情,并稍微规范化一些事情。有一个包含标签名称和 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 上回答的

关于javascript - Meteor:为收集服务器端创建过滤器并将它们存储在本地集合中。好主意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19832455/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com