复杂流星出版物未按预期反应更新

时间:2014-11-04 19:24:55

标签: mongodb meteor iron-router

我正在开发一个Meteor应用程序,该应用程序使用多个在树型组织中相互引用的集合。但是,它们在我的数据库结构中都表示为平面集合。例如,我有一个顶级Cars集合,一个Parts集合和一个Sellers集合,看起来像这样(伪代码):

Cars {
   _id:
   make:
   model:
   year:
   etc...
}

Parts {
   _id:
   carId: Cars._id
   type:
   desc:
   etc...
}

Seller {
   _id:
   partId: Parts._id
   location:
   name:
   etc...
}

所以他们在树中互相引用的方式如下:

Car
 |
 ---->  Part
 |       |
 |       ----> Seller
 |       |
 |       ----> Seller
 |       |
 |       ----> Seller
 |
 ---->  Part
         |
         ----> Seller
         |
         ----> Etc...

我遇到的问题是我使用了几个顶级出版物,我通过了Car._id并希望查看Sellers出售Parts的所有Car 。所以在我的路线中,我有一个看起来像这样的订阅:

waitOn: function() {
   return Meteor.subscribe('allSellersByCar', this.params._id);
}

所以要从Sellers返回所有Car._id,我会抓取与Parts匹配的所有Car._id,然后使用下划线_.pluck() Part._id 1}}并找到与Sellers数组匹配的所有Part._id

Meteor.publish('allSellersByCar', function(carId) {
   var parts = Parts.find({carId: carId}).fetch();
   return Sellers.find({partId: {$in: _.pluck(parts, "_id")}});
});

此方法正常工作并正确返回所有Sellers。问题是这个方法只会在它们被添加到EXISTING Sellers时重新返回Parts,并且模板会按预期实时更新,但它不会返回任何添加到任何Sellers的{​​{1}}添加到Parts对象的新Car。所以它似乎只是被动地更新了查询的最后一行。添加新Part时,不会重新运行整个查询。但是如果刷新页面(以及路由),查询将重新运行并且所有内容都会正确返回。

我的应用程序中有多个这样的出版物,其中一些在返回之前还有几个“中间人”提取。我不确定如何解决这个或问题是什么。我的酒吧/潜水员错了吗?我是否应该对参考文献进行去标准化,并为每个carId添加Seller,这样我就可以直接在Seller集合中进行查询,而不必查看Parts {1}}获取?

0 个答案:

没有答案