问题标签 [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 回答
142 浏览

javascript - 如何改善或避免流星出版物中的查找/获取周期?

TL;博士:

聊天是一个集合。ChatMess 另一个包含引用 Chat _id 的消息的消息。如何以尽可能少的计算从聊天列表中获取最后一条消息?在这里,循环中的查找/获取周期太重且太长。

我有这个出版物,用于向用户返回一组光标:

  • 他参加的聊天会话(来自聊天收藏)
  • 第一个光标中引用的每个聊天会话的最后一条消息(来自 ChatMess 集合)

目前,逻辑是:

  • 从用户个人资料中获取聊天会话列表
  • 找到聊天会话并循环播放
  • 在循环中,我找到来自此聊天会话的最后一条消息,并将其 _id 存储在一个数组中。此外,我存储所有其他用户_id。
  • 然后,我找到 _id 与我的数组中的消息匹配的消息。

这是我的主要问题:

难道没有一种更快的方法来从我的每个聊天会话中获取最后一条消息吗?使用该算法,我很容易达到 8000 毫秒的响应时间,这是一个过于繁重的计算时间,因为大部分时间都用于查找/获取聊天消息的 _id(参见 Kadira 的链接屏幕)。

最后,它还为我随后的所有 DDP 请求添加了延迟。我目前使用 this.unblock() 来避免这种情况,但我不想在这里使用它。

仅供参考,我有另一个发布,每次客户端更改他当前的活动聊天会话时都会更新:在客户端上,路由到一个新的聊天将其 _id 添加到一个反应数组中,以更新我的 getChatMess 订阅,以便在客户端上获取消息从用户连接后访问的每个聊天中。目标显然是让服务器不必从用户一生中访问过的每个聊天会话中发送每条消息。

不幸的是,我缺乏在不破坏我所有聊天逻辑的情况下改进算法的想法:S。你有什么想法吗?你会怎么做?

谢谢。

编辑:这是来自 kadira 的屏幕,清楚地显示了问题: 在此处输入图像描述

0 投票
1 回答
214 浏览

angularjs - 使用发布复合加入流星角中的查询

我有两个 Collections CategoryFeeds

类别

饲料

我需要得到这样的结果:

我尝试使用发布复合,这是我的代码。

服务器

在客户端 Angular 中,我尝试了这个:

我也对视图部分感到困惑。

0 投票
2 回答
359 浏览

meteor - 流星,发布:复合。如何访问模板中的连接数据?

所以我使用 publishComposite 在 Meteor 中做一个集合连接。我有一个带有 user_id 外键的父集合(订阅)。我在 Meteor.users 集合中查找用户名以获取实际用户名,但我如何在 html 模板中实际打印它。我的订阅数据在那里,但我如何实际引用用户名?

这是发布代码:

这是模板子脚本:

并且模板(这是垃圾)ps课程详细信息来自单独的集合。单独获取详细信息更容易,我认为性能更高,而且效果很好。这只是我无法正确显示的用户名:

在此先感谢您的任何建议!

0 投票
0 回答
461 浏览

angularjs - 排队任务中的​​异常:TypeError:无法读取未定义、角流星的属性“拼接”

我正在为我的项目使用 angular-meteor。当我删除“自动发布”并为我的集合添加发布方法时,当我尝试获取任何数据时,我在控制台中收到以下错误。

很久以来我一直在尝试解决这个问题,但找不到任何解决方案。

我的控制器代码:

并发布代码:

当我将“自动发布”添加到项目时,我没有收到错误

0 投票
1 回答
86 浏览

javascript - 在 Meteor 发布中通过 id 链接用户

我有一个格式如下的 mongo 文档:

...其中 userIds 显然是 Meteor 自己的用户文档 ObjectIds。

我真正遇到的问题是我希望用户查看他们组中的其他用户信息。在这个实现中,我正在想象一个安全的(阅读:我删除了自动发布和不安全的)组消息系统。

我当前的发布实现如下所示:

现在,理想情况下,我希望groups在完成发布之前实现一些代码来操作,以便同时发布每个参与者的user.profile数据。想象的最终格式如下:

我注意到的一件事是,如果没有自动发布和不安全,我不能只通过辅助函数在客户端上执行此操作。

0 投票
0 回答
34 浏览

meteor - Meteor 1.3.1 和延迟模拟

我正在尝试添加Meteor._sleepForMs(2000);甚至添加Meteor._sleepForMs(20000);到我的出版物中,但没有任何反应。

我怎样才能增加延迟?

0 投票
2 回答
183 浏览

meteor - 如何使用 Iron-router 和 publish-composite 等待数据准备就绪

我有以下路线:

和以下出版物:

现在我的问题是:当相关页面首先呈现时没有问题,但是当我实现组页面查看行时: var members = Meteor.users.find({_id : {$in: group.memberIds}} ); 给我错误:未定义的对象没有 memberIds 属性。我想这是因为在进行 group.memberIds 时订阅还没有准备好,不是吗?请提示。谢谢。

0 投票
1 回答
231 浏览

meteor - Meteor 1.3 + React:检测订阅失败?

我有一个简单的 Meteor 订阅,并在加载数据时显示加载消息。但是如果订阅失败,我不知道如何显示错误消息。

问题是,订阅对象没有failed()方法,只有ready()查询。如何将订阅失败作为createContainer()方法中的道具传递?

我知道该Meteor.subscribe方法在这种情况下有一个onStop回调,但我不知道如何将它粘合在一起以传递属性。

0 投票
1 回答
152 浏览

javascript - 应该命名 Meteor 发布函数吗?

我试图更好地了解发布/订阅模型的工作原理。

具体来说,我指的是教程中的一步。

tasksPublication在本教程后面的任何地方都不会使用该名称。

在这里查看文档,似乎不需要名称。
命名发布函数有什么不同吗?

0 投票
1 回答
68 浏览

javascript - 我应该如何让我的出版物保持反应性?

我正在从自定义用户权限管理系统迁移到Alanning:roles v2.0。我有一个非常基本的结构:

  • 一个基础用户
  • 用户组,每个用户都有特定的设置。我将它们存储在“组”集合中。
  • 管理组的用户的组管理员状态(每个组都有其组管理员)。

我之前将组成员和管理员 mongo 存储_id在“组”文档中。这样,我可以反应性地发布组:我只需要检查userId组文档中的“成员”或“管理员”字段中是否存在。

现在我切换到由 Alanning:roles 强制执行的正确管理,我在我的出版物中做了这样的事情:

请注意,这Roles.getPartitionsForUser ()只是Roles.getGroupsForUser ().

这里的问题是发布不会监视role集合中的更改,因此当用户成为成员时,发布不会更新。我知道这是一个常见问题,并且我知道解决此问题的 3 种方法,但没有一种方法能令人满意:

  • 最佳候选:非规范化和复制。我将我的membersadmins字段保存在组文档中。让我烦恼的是,我将保留同一事物的 2 个版本,并创造出现不一致的可能性。

  • 向发布添加一个参数并使用此参数重新运行它(例如userGroupsAsMember),但它依赖于客户端并使其发送不必要的信息。

  • 直接或使用包使用低级发布 api 。我过去已经直接这样做了,但我不想再依赖Cursor.observe()了,因为它不能有效地扩展并产生不必要的服务器负载。

我错过了一个选择吗?如果不是,那么让我的出版物保持反应性的最佳方法是什么?