【问题标题】:Add an extra field to collection only on the client side and not affecting server side仅在客户端向集合添加额外字段,不影响服务器端
【发布时间】:2017-04-17 06:22:21
【问题描述】:

有没有办法在集合中添加或注入额外的或新的字段,然后能够在客户端访问该新插入的字段到集合中并在模板上显示或访问它而不影响服务器端?我不想与 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 包中的交付计数进行排序,但该包仅对现有字段进行排序。或者有没有办法单独使用包来做到这一点?

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

【问题讨论】:

    标签: mongodb meteor meteor-easy-search


    【解决方案1】:

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

    您有 2 种解决方案,一种标准,另一种 hacky:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-10
      • 1970-01-01
      • 2018-02-03
      • 2010-11-14
      • 2019-01-17
      • 2021-03-18
      • 1970-01-01
      • 2011-06-14
      相关资源
      最近更新 更多