我有一个如下所示的文档。
{
_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));
对于 meteor 来说这可能吗?
最佳答案
您应该能够使用peerlibrary:reactive-publish 来做到这一点。您只需将要发布的光标包装在出版物中的自动运行中即可。只要 react 性依赖项之一(在本例中为三个游标)发生变化,就应该重新运行它:
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
];
});
});
关于javascript - 在观察者中发布附加游标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34228219/