Mongo查询速度慢,查询前数据显示

时间:2016-03-06 06:01:06

标签: mongodb meteor delay

我创建了两个模板( A B )。

A - 当用户没有在某个Mongo集合中创建文档时显示。

B - 显示用户是否在集合中创建了文档。

基本上我正在显示一个" Theres nothing here here"当没有内容时。

为实现这一目标,我使用帮助程序查询mongo以检查文档是否存在。它看起来如下:

defaultCheck: function() {
  var offerid = this.offerAccepted;

  var id = Meteor.userId();

  var result = Listing.find({
    $or: [{
      creator_id: Meteor.userId(),
      status: "Completed"
    }, {
      offer_creator: Meteor.userId(),
      status: "Completed"
    }]
  });

  return Boolean(result.count());
}

因此返回true或false布尔值。

在我的布局模板中,我使用#if来检查defaultCheck助手的值,并隐藏或显示 A B 模板

{{#if defaultCheck}}
{{#each meetup}}
{{> ProfileActiveCard}}
{{/each}}
{{else}}
{{> DefaultProfileActive}}
{{/if}}

问题是查询太慢而 A 模板在查询完成之前会短暂显示(闪烁)。

我该如何防止这种情况?

1 个答案:

答案 0 :(得分:1)

这是我在数据加载时显示微调器的建议方法:

私人变量:

var isDataLoaded = false;

<强>助手:

dataLoaded: function() {
  return isDataLoaded;
}

defaultCheck: function() {
  var offerid = this.offerAccepted;

  var id = Meteor.userId();

  var result = Listing.find({
    $or: [{
      creator_id: Meteor.userId(),
      status: "Completed"
    }, {
      offer_creator: Meteor.userId(),
      status: "Completed"
    }];
  });

  isDataLoaded = true; // should be set to true only after database query finishes

  return Boolean(result.count());
}

<强>模板:

{{#if !dataLoaded}}
    {{> spinner}}
{{else}}
    {{#if defaultCheck}}
        {{#each meetup}}
            {{> ProfileActiveCard}}
        {{/each}}
    {{else}}
        {{> NoDataFoundTemplate}}
    {{/if}}
{{/if}}

我不是100%确定这会按预期工作,或者它是最好的方法,但这是一个开始。