仅在客户端添加额外字段到集合,而不影响服务器端

时间:2016-12-02 10:55:17

标签: mongodb meteor meteor-easy-search

有没有办法向集合中添加或注入一个额外的或新的字段,然后能够在客户端访问该新插入的字段并将其显示在模板上或访问它而不影响服务器端?我不想在API或数据库中妥协,因为它只是一些东西,比如客户总共有8次交付。

我正在编写这个代码,我正在订阅一个集合,然后尝试在客户端更新集合,但显然我没有权利更新它:

Meteor.subscribe("all_customers", function () {
    Customer.find({}).forEach(function(data) {
        var delivery_count = Delivery.find({ customerID: data._id }).count();
        Customer.update( { _id: data._id } , { $push: { deliveries: delivery_count } } );
    });
}),

然后执行此操作,我会尝试通过插入新的键值对来操作集合,但在发送时它不会显示或根本不显示:

Meteor.subscribe("all_customers", function () {
    Customer.find({}).forEach(function(data) {
        var delivery_count = Delivery.find({ customerID: data._id }).count();
        data.deliveries = delivery_count;
    });
}),

我的主要目标是基本上能够在不影响API或数据库的情况下对EasySearch包中的交付计数进行排序,但包只对现有字段进行排序。或者有没有办法单独使用包?

请原谅我,如果这个问题可能听起来很愚蠢,但我希望有人可以提供帮助。

1 个答案:

答案 0 :(得分:0)

完全有可能,因为您可以使用此处所述的低级出版物:https://docs.meteor.com/api/pubsub.html

你有2个解决方案,一个标准,另一个hacky:

  • 在将文档发送给客户之前,您需要关注文档,transform。您的服务器数据不受影响,您可以从订阅中增强数据(甚至是连接)。它很酷但你不能把它推得太远,因为它可能会碰撞并与同一页面上同一集合的另一个出版物发生冲突。解决方案在这里得到了很好的解释:How to publish a view/transform of a collection in Meteor?
  • 您可以执行仅限客户的集合,该集合将是仅包含您需要的数据的海关对象。您仍然在源集合上有一个服务器端观察者,但您将获取客户端将处理和显示的新对象,而无需任何计算。您需要更多代码,但这样,您就不会使用经典的服务器 - 客户端集合。如果你想要一个详细的例子,那就有点矫枉过正了。