问题标签 [meteor-publications]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
162 浏览

meteor - Meteor:发布另一个出版物的子集

我的服务器上有一个自定义出版物(以某种方式加入了 2 个集合)。

这本出版物的结果集正是我所需要的,但对于性能问题,我想避免将其完全发送给客户。

如果我不关心表演,我只会订阅出版物并做类似的事情 theCollection.find({"my":"filter"})

因此,我试图找到一种方法来发布自定义发布的子集,以便将过滤器应用于服务器端的自定义发布。

有没有办法链接或过滤发布(服务器端)?

对于这个问题,我们可以假设自定义出版物看起来像这样并且不能修改:

0 投票
1 回答
35 浏览

javascript - 我应该每个集合使用一个发布还是多个发布?

我正在开发用户组系统。每个组都有几个功能,我想让与组集合的交互尽可能安全和简单,因为它仍处于早期阶段。

现在,我的网站中有一个小组部分,我在其中使用了几个嵌套页面。该部分的目的是允许用户进入一个组,如果该组是私有的,则请求成员资格,浏览一个组对象等。

例如,在我的群组部分,我可以在收益中加载“查看所有群组”页面、“创建新群组”页面或“仅查看我的群组”(我所属的群组)或“查看群组” " 获取组详细信息。

我的第一种方法是为每个子页面创建一个controller.js文件,该文件调用一个为子页面需求量身定制的订阅。例如,我有一个用于“查看所有组”子页面的“all_group”发布/订阅,以及一个用于“仅查看我的组”子页面的“my_groups”。

但这变得非常混乱。此外,我在两个文件夹中声明了我的“组”集合,因此我不确定客户可用数据的来源。

现在我解释了情况,这里是我的问题:

  • 当我console.table(Groups.find().fetch());在客户端上进行操作时,我看到了不应该存在的字段(即我当前的出版物或任何其他出版物不返回)。那是因为我在客户端声明了“组”集合吗?如何解决?
  • 我是否应该摆脱所有这些出版物,只创建一个包含允许客户查看的所有内容的出版物?然后我会从组部分页面控制器订阅它并使用一组数据。
  • 我是否应该简单地使用允许/拒绝规则阻止来自客户端的任何插入/更新/删除,并仅使用方法进行这些操作?
  • 将我的方法放在both文件夹中是否安全/建议这样我就不会失去延迟补偿功能?

编辑 好吧,我吓坏了,因为我在客户端拥有所有收集数据,但这只是发布中的一个错误查询(我同时使用field:1field:0预测)。剩下两个问题:

  1. 如果我使用方法,我假设我不必否认本机驱动程序中的所有内容,我只需要比方法允许的更严格,对吧?
  2. 如果我将我的方法放在两个文件夹中,它将在客户端和服务器上执行,因此在“客户端离线”上下文中,即使客户端弄乱了我的方法,如果客户端结果不同,服务器也应该回滚更改比他的(假设无法使用允许拒绝规则完成更改)?即使使用这些方法,我也会有延迟补偿?
0 投票
1 回答
178 浏览

meteor - 更新订阅限制参数的有效模式

我正在使用 subs-manager,但对此的答案可能与该库无关。

我有一个带有单个limit参数的订阅。目前,当我打电话时subs.subscribe 'subname', newLimit,会添加另一个订阅。

图片

旧订阅仍然存在。我不希望 Meteor 花费时间维护旧的、下限订阅。我不想添加新订阅,而是想更新旧订阅的参数。做这个的最好方式是什么?

请注意,我也不想'subname', 20在订阅之前完全删除例如'subname', 40,因为我不希望 Meteor 完成重新发送前 20 个文档的额外工作——我希望它只发送 21 - 40 个文档。

0 投票
2 回答
538 浏览

mongodb - 在每个文档中使用附加字段构建反应式出版物

我想制作一个包含几个附加字段的出版物,但我不想Collection.aggregate在集合更改时使用和丢失我的出版物更新(所以我也不能只self.added在其中使用)。

我计划使用Cursor.observeChanges以实现这一目标。我有两个主要限制:

  1. 我不想发布所有文档字段
  2. 我想使用一些未发布的字段来创建新字段。例如,我有一个存储_iditem数组的字段。item我不想发布它,但我想发布一个item_count字段长度为我的字段数组

方法来了:

  1. 我计划链接查找查询。我从来没有这样做过,所以我想知道是否可能。一般(简化)查询结构如下:http: //jsfiddle.net/Billybobbonnet/1cgrqouj/(我无法在此处正确显示代码)

  2. 根据Meteor 文档中的计数示例,我将查询存储在一个变量handle中,以便在客户端取消订阅时停止更改通知:

  1. initializing = true;我在查询之前添加了一个标志,并将其设置为true就在调用self.ready();. itemCount仅当发布已初始化时,我才使用此标志更改我的变量。所以基本上,我改变了我的switch样子:

在对我的代码进行重大更改之前,我想检查这种方法是否良好且可行。如果这是正确的方法,有人可以确认我吗?

0 投票
2 回答
217 浏览

meteor - Meteor:发布所有用户在没有自动发布包的情况下无法工作

我想在我的模板中显示所有用户的列表。我有:

但是列表只显示当前登录的用户。我已经使用Account.createUser()函数创建了一个用户列表我做错了什么?

谢谢。

0 投票
1 回答
6039 浏览

meteor - 如何在流星的单个订阅调用中发布多个集合?

我可以在单个订阅调用中发布多个集合吗?如果是这样,请指导我。

0 投票
1 回答
33 浏览

meteor - 我什么时候应该创建另一个出版物,性能方面?

我的第一个模板有一个包含 10 个字段的出版物。

我有另一个模板,我只需要同一出版物的 5 个字段。由于用户可以访问两者,这取决于加载的模板,因此安全性是多余的。

问题

性能方面,我应该只用我需要的 5 个字段再发表一次,还是应该依赖我的第一次发表?

我希望它是一个权衡:

  1. 发送的数据量
  2. 服务器端负载(这些出版物中的每一个都将使用cursor.observe()
  3. 当前订阅的用户数(mergeBox 加载)

另一种解决方案可能是创建 2 个出版物:具有 5 个字段的基本出版物和具有 5 个其他字段的另一个出版物。在我的第一个模板中,我订阅了两者,在第二个模板中我只订阅了第一个。

我理解这个理论,但我无法从中推断出什么是最好的方法。我希望在这种情况下有好的做法。

一切也可以是等价的,这将使它成为不必要的微优化(这将回答我的问题)。

谢谢!

0 投票
2 回答
4471 浏览

meteor - Meteor.publish 不是函数

我有一个仅包含的Publications.js文件

当事情渲染时,我在控制台中得到了这个:

我在这里错过了什么......我敢肯定这很明显。

0 投票
1 回答
466 浏览

javascript - 发布更改时防止 Meteor 删除已发送到客户端的 MiniMongo 数据

我注意到,当我更改已发布的光标时——不是光标指向的数据,而是整个光标——Meteor 将向removed客户端发送一条消息,以获取所有未出现在新光标中的文档。我的意思是更专业的术语:

现在,当someReactiveVar更改时,所有已发送到客户端 MiniMongo 的文档都myCollection将被删除(如果它们不是新光标的一部分)。在某些情况下,这是您想要的,但我的问题很简单:我可以阻止这种情况吗?如何?

0 投票
3 回答
416 浏览

mongodb - Meteor / Mongo 查找记录并根据子字段修剪子 ID 的子数组?

我在 Meteor 中有一个这样的集合:

文章集合具有以下架构

标签本质上是索引搜索词。

每篇文章都有一个权限设置为“私人”、“组”或“公共”。

现在,我正在发布这样的标签:

然后在客户端中,我正在过滤文章列表并仅显示那些公开的或私有但由当前用户创建的文章。

但是,理想情况下,出于安全目的,我想在发布功能本身的服务器端进行过滤,以防止客户端访问私人文章的文章 ID。除非客户端具有适当的权限,否则我确实会阻止访问实际的文章对象,但我想更进一步,从结果中完全删除 ID。

所以我正在寻找的本质上是一个允许我使用以下伪代码的查询:

我最初考虑使用与上面完全相同的函数来执行此操作(基本上获取所有记录,然后遍历每个记录并手动修剪数组,然后返回更新的记录集),但我的理解是我会失去 Meteor 的反应性如果基础数据发生变化,记录集将不会更新。

在没有完成这项工作的单个 find() 查询的情况下,如果有一种方法可以对函数进行额外的传递并仍然返回反应性数据集,那么我也可以使用该解决方案。

由于无论如何这是一个非规范化集合(标签也位于文章文档中),我想我还可以进一步非规范化,不仅包括文章 ID,还包括 ownerId 和权限。但我仍然不确定如何测试单个数组元素,如果可能的话,我想尽量减少我需要做的非规范化量......