在Meteor中查询时使用fields选项有什么好处

时间:2015-06-09 07:23:46

标签: mongodb meteor

- (void)application:(UIApplication * nonnull)application didRegisterUserNotificationSettings:(UIUserNotificationSettings * nonnull)notificationSettings

运行时间测试后,看起来这个查询需要的时间比SomeCollection.find({}, { fields: { exerciseId: 1} }) 更长,没有任何参数。限制该领域有什么好处吗?我想,它会使用更少的本地内存,但什么时候值得呢?

3 个答案:

答案 0 :(得分:1)

根据我的经验,在客户端上使用fields的好处是有限的。但是,在服务器上定义出版物时,绝对应该使用它,原因有两个:

  1. 安全性:隐藏客户无法看到的字段,尤其是关于其他用户的字段
  2. 性能:更少的字段意味着线路上的字节更少。订阅包含许多文档时尤为重要。

答案 1 :(得分:0)

好处是它变得不那么活跃,您可以在Tracker.autorun以及使用observeobserveChanges时受益。

修改

我不是100%肯定Tracker.autorun

答案 2 :(得分:0)

明确指定确实在节省内存,通过线路发送更少的数据,可能会给您带来很小的性能提升。它的另一个重要用途是作为安全措施。想象一下,您希望客户端订阅Users集合,但您不希望用户的密码或包含敏感信息的任何其他字段在客户端上可见。在这种情况下,当您发布该集合时,您可以这样做:

Meteor.publish('secureUsers', function() {
  if(!this.userId) return null;
  return Meteor.users.find(this.userId, 
    {fields: 
      {
        someNonSensitiveField: 1, /* avatar information, for example */
        otherNonSensitiveField: 1
      }
    }
  );
});

这样,只有指定的字段才会包含在集合对象中,而忽略了其他可能敏感的数据。另一种方法是指定哪些字段是敏感的并明确排除它们。

HTH!