我的页面上有两个部分。
第一部分的项目列表有限。第二部分有项目总数(recordsCount)。
当服务器添加新项目时,我看到项目列表已更新,但总计数具有旧值。
Tracks = new Mongo.Collection('tracks')
客户端:
Meteor.subscribe('tracks')
Meteor.call('records', function(err, data) {
Session.set('_records', data)
})
Template.tracks.helpers({
tracks: function() {
return Tracks.find()
},
recordsCount: function() {
return Session.get('_records')
}
})
服务器:
Meteor.publish('tracks', function() {
return Tracks.find({}, {limit: 100})
})
Meteor.methods({
records: function() {
return Tracks.find({}).count()
}
})
var CronManager = new Cron(10000)
CronManager.addJob(1, function() {
Tracks.insert({filed1: 'test'})
})
答案 0 :(得分:1)
如果您只是想有效地将计数带入您的应用,请查看publish-counts包。
Meteor.publish('posts', function(author) {
var cursor = Tracks.find(...);
Counts.publish(this, 'tracks-count', cursor, {nonReactive: true});
});
nonReactive
选项仅在需要时发送计数。如果您不需要实时计数,这可能很有用,因为大多数应用程序可以每隔几秒就更新一次。这将节省大量的CPU。
Template.tracks.helpers({
tracks: function() {
return Counts.get('posts-count')
}
});
Hattip与Arunoda在Bulletproof Meteor, Counting Documents上的精彩篇章。
答案 1 :(得分:0)
我使用publish-counts包调查了该解决方案。就我而言,它是非常重的包装。它一直在加载CPU。我已经替换了我的服务器端代码以使用带有count字段的集合。
普通的:
Counter = new Mongo.Collection('count')
服务器: Meteor.Publish('count',function(){ return Counter.find() })
if(Counter.find().count() === 0) Counter.insert({count: Tracks.find().count()})
var CronManager = new Cron(10000)
CronManager.addJob(1, function() {
Counter.update({}, {$inc: {count: 1}})
Tracks.insert({filed1: 'test'})
})