2015-01-14 8 views
10

क्या उपयोगकर्ता को संग्रह के लिए केवल गणना प्रकाशित करना संभव है? मैं होमपेज पर कुल गिनती प्रदर्शित करना चाहता हूं, लेकिन उपयोगकर्ता को सभी डेटा पास नहीं करना चाहता हूं। मैंने यही कोशिश की लेकिन यह काम नहीं करता है:उल्का - संग्रह के लिए सिर्फ गिनती प्रकाशित करें

Meteor.publish('task-count', function() { 
    return Tasks.find().count(); 
}); 

this.route('home', { 
    path: '/', 
    waitOn: function() { 
     return Meteor.subscribe('task-count'); 
    } 
}); 

जब मैं इसे आज़माता हूं तो मुझे अंतहीन लोडिंग एनीमेशन मिलता है। कुछ सहायक में

var count; /// Global Client Variable 

Meteor.startup(function() { 
    Meteor.call("count", function (error, result) { 
     count = result; 
    }) 
}); 

वापसी count

सर्वर::

+0

उन है 'Tasks' उपयोगकर्ताओं या कुछ भी से संबंध रखते हैं? मैं क्यों पूछ रहा हूं कि आप उस उपयोगकर्ता को 'उपयोगकर्ता' संग्रह के भीतर उस गिनती को बनाए रख सकते हैं और इसे वहां से प्राप्त कर सकते हैं – ajduke

उत्तर

16

Meteor.publish फ़ंक्शंस कर्सर को वापस करना चाहिए, लेकिन यहां आप सीधे Number लौट रहे हैं जो आपके Tasks संग्रह में दस्तावेज़ों की कुल गणना है।

उल्का में दस्तावेजों की गणना करना एक आश्चर्यजनक रूप से कठिन कार्य है यदि आप इसे उचित तरीके से करना चाहते हैं: एक समाधान का उपयोग करके सुरुचिपूर्ण और प्रभावी दोनों।

पैकेज ros:publish-counts (tmeasday:publish-counts का एक कांटा) छोटे संग्रह (100-1000) या बड़े संग्रह (हजारों) के लिए "लगभग सटीक" मायने रखता है fastCount विकल्प का उपयोग करने के लिए सटीक गिनती करने देता है।

// server-side publish (small collection) 
Meteor.publish("tasks-count",function(){ 
    Counts.publish(this,"tasks-count",Tasks.find()); 
}); 

// server-side publish (large collection) 
Meteor.publish("tasks-count",function(){ 
    Counts.publish(this,"tasks-count",Tasks.find(), {fastCount: true}); 
}); 

// client-side use 
Template.myTemplate.helpers({ 
    tasksCount:function(){ 
    return Counts.get("tasks-count"); 
    } 
}); 

आप एक क्लाइंट-साइड प्रतिक्रियाशील गणना में भी साथ ही साथ एक सर्वर साइड यथोचित performant कार्यान्वयन:

आप इसे इस तरह से उपयोग कर सकते हैं।

यह समस्या एक (भुगतान) बुलेट प्रूफ उल्का सबक है जो एक सिफारिश की पढ़ने में चर्चा की है: https://bulletproofmeteor.com/

6

मैं एक Meteor.call

क्लाइंट का प्रयोग करेंगे

Meteor.methods({ 
    count: function() { 
    return Tasks.find().count(); 
    } 
}) 

* इस समाधान नोट प्रतिक्रियाशील नहीं होगा। हालांकि अगर प्रतिक्रियाशीलता वांछित है तो इसे शामिल किया जा सकता है।

संबंधित मुद्दे