Как ускорить время ответа на запрос mongoDB в метеоре? - PullRequest
0 голосов
/ 20 мая 2018

У меня есть записи 15К в моей коллекции с минимум 40 полей, я создал таблицу, которая создается из записей.В этой таблице у меня есть различные поля, как показано на рисунке (из листа Excel).enter image description here

/ client / main.js

Template.GetTable.helpers({
    'getTotalData':function(key1,key2){

        console.log("-------inside totalData()---------");
        const projects1 = Template.instance().distinct1.get();
        var filter1= _.map(projects1, col_8 => {
          return {col_8};
        });
        q={};
        p={};
        console.log(filter1);
        console.log(JSON.stringify(q));
            //var queryData=test.find(q).fetch();
            Meteor.call('getCountData',"all",function(err,count){
                if(err) 
                    console.log("Failed to call meteor..!");
                else{
                    console.log(count);
                    return count;
                }
            });
        },
  });

/ server / main.js

Meteor.methods({
'getCountData':function(type){
              return test.find({"col_17" : " Query->:#####->x","col_8": { $regex: /^CQI?/i}}).count();  
    },
});

Я только тестировал тестирование и знаю, как получить счет из БД.Моя проблема заключается в том, что после всего рендеринга и помощники называются пользовательский интерфейс будет загружаться без каких-либо данных подсчета.Но когда я зарегистрировался в отладчике, я получил правильные значения, напечатанные с помощью console.log (), и пользовательский интерфейс не обновился.Как я могу решить эту проблему?или есть эффективный способ решить эту проблему?

1 Ответ

0 голосов
/ 24 мая 2018

Проблема пользовательского интерфейса в том, что вы выполняете вызов Meteor внутри помощника и возвращаете результат вызова самому себе, а не помощнику.

Вот пример того, что вы делаете, и что вы делаетеСЛЕДУЕТ делать.

НЕ СЛЕДУЕТ:

Template.GetTable.helpers({
'getTotalData':function(key1,key2){
        Meteor.call('getCountData',"all",function(err,count){
            if(err) 
                console.log("Failed to call meteor..!");
            else {
                return count; // Being returned to this function, not helper fuction
            }
        });
    },

});

СЛЕДУЕТ:

var recVar = new ReactiveVar(false);
Template.GetTable.onCreated({
    Meteor.call('getCountData',"all",function(err,count){
        if(err) 
            console.log("Failed to call meteor..!");
        else {
            recVar.set(count);
        }
    });
 });
 Template.GetTable.helpers({
    'getTotalData':function(key1,key2){
        return recVar.get();
    },
 });
...