当前位置: 首页 > 知识库问答 >
问题:

在观察者中发布其他游标

孙凌龙
2023-03-14

我有一个文件看起来像这样。

{
  _id: ObjectId,
  orders: [ObjectId, ObjectId]
}

查找这些订单将得到如下结果

{
  _id: ObjectId,
  products: [ObjectId, ObjectId, ObjectId]
}

现在我的出版物将找到并观察父Meteor.users

Meteor.publish(function () {
  let handle = Meteor.users.find(this.userId).observe({
    added: doc => {
      // publish all orders
      // publish all products within that order
    },
    changed: doc => { /** same as above */ }
  });
  this.ready();
  this.onStop(() => handle.stop());
});

当其中任何一个发生变化时,我想修改顶级文档并发布它。也就是说:

this.changed('user', doc._id, publishRelations(doc));

流星有可能吗?

共有1个答案

韩彬
2023-03-14

您应该能够使用peerLibrary: reactive-发布来做到这一点。您只需将要发布的游标包装在发布中的自动运行中。它应该在反应式依赖项(在本例中为三个游标)之一更改时重新运行:

Meteor.publish("userOrders", function() {
   var self = this;
   self.autorun(function() {
      var productIds = [];

      // get logged in user
      var userCursor = Meteor.users.find(self.userId);

      //  get orders belonging to logged in user
      var ordersCursor = Orders.find({userId: self.userId});


      // create array of product Ids from user's orders  
      // You could probably make this better by omitting duplicates  
      ordersCursor.forEach(function(doc, index) {
        _.each(doc.products, function(productId) {
           productIds.push(productId);
         });
      });

      // get products in array
      var productsCursor = Products.find({ _id: { $in : productIds } });

      // return array of cursors
      return [
         userCursor,
         ordersCursor,
         productsCursor
      ];

   });

});
 类似资料:
  • 我正在学习RxJS,对于“听众”在哪里(在可观察的或观察者中),他们是如何订阅/取消订阅的,以及当观察者“不再对”可观察的“不感兴趣”时会发生什么,比如当你使用或。 对于第一部分——什么是订阅什么,什么是倾听者——我对这些陈述之间看似矛盾的地方感到困惑。从http://reactivex.io/rxjs/manual/overview.html我们读到观察者不是观察者的“听众” 这与addEven

  • 问题内容: 我一直在阅读Observer模式,以保持UI处于最新状态,但仍然看不到它的用途。即使在我的特定对象中通知了我的MainActivity然后运行update();方法我仍然无法使用Pet对象来获取更新值,因为该对象是在Oncreate中创建的…而我只是无法创建新对象,因为那时变量会有所不同..这是我的实施,它似乎不起作用。 观察者/ MainActivity 可观察/宠物 问题答案: 首

  • 我们支持使用分布式消息系统,例如 etcd 来保持多个Casbin执行器实例之间的一致性。 因此,我们的用户可以同时使用多个Casbin 执行器来处理大量的权限检查请求。 与策略存储 adapters类似,我们没有把watcher的代码放在主库中。 任何对新消息系统的支持都应该作为watcher程序来实现。 完整的Casbin watchers列表如下所示。 欢迎任何第三方对 watcher 进行

  • ORM类底层提供了Observer支持,可以在数据更新、删除、插入时通知观察者。 $user1 = Model('User')->get(1); $user1->attach(new \App\Observer\UserUpdate()); $user->mobile = '18948735886'; $user->save(); 观察者类 namespace App\Observer; cl

  • 什么是观察者? - 观察者是由 Observable 发送的值的消费者。观察者只是一组回调函数的集合,每个回调函数对应一种 Observable 发送的通知类型:next、error 和 complete 。下面的示例是一个典型的观察者对象: var observer = { next: x => console.log('Observer got a next value: ' + x),

  • 我来自同步编程背景,我很难理解可观察性。 这是我的服务/提供商的摘录(离子2项目) 我将从订阅它。关于这一点,我有几个问题。 > 即使我没有声明,上面的代码是否返回一个可观察/观察者? 响应是JSON。如何检查/处理JSON并执行一些操作,如 那就做吧 我认为应该在提供者类中完成。只是一个典型的提示/例子将是真棒。 当请求到达subscribe方法时,它是否真的发生了? 创建和返回Angular