在Meteor 0.7.0.1中,是否可以计算/找出当前正在收听特定集合的所有查询?
我正在尝试创建一个函数:每当监听特定查询的用户数量(例如:myCollection.find({color:'red'})
变为非零时),每当文档被更改/添加到第二个集合时执行函数{ {1}}。
答案 0 :(得分:0)
何时/如何调用find方法?例如,当有人点击页面上的按钮时调用它,只需增加一个将在发生这种情况时增加的服务器端变量。要在用户离开页面时减少此变量,请收听window.onbeforeunload
事件,并在事件发生时减少计数。
或者,如果您有登录系统,请为每个用户分配一个布尔值,例如online
。登录后,使用以下代码使其在线状态为true。 if(Meteor.user()){Meteor.user().online=true;}
。确保onbeforeunload
在离开时将其在线状态设置为false。然后,执行Meteor.users.find({online:true}).size()
之类的操作以获取在线用户数量。
基本上,不是在调用myCollection.find({color:'red'})
时更新,而是将其放在函数中。例如:
if(Meteor.isClient){
Session.set('browsing', false);
function findColor(c){//Alerts the server when the user attempts to get a color.
//This is presuming they don't use the plain MongoDB command.
//Your button/however you're finding the color should use this command
if(!Session.get('browsing'))//if it's already true, don't increase the count
{
Meteor.call('incBrowsing');
Session.set('browsing', true);
}
return myCollection.find({color:c});
}
window.onbeforeunload = function(){Meteor.call('decBrowsing');};
}
if(Meteor.isServer){
var browsing = 0;
Meteor.methods({
incBrowsing: function(){browsing++;},
decBrowsing: function(){browsing++;}
});
}
我没有测试过这个,但我希望它对你有用。您没有提供太多关于您的问题的详细信息,因此如果您或我需要澄清某些内容,请随时在下面发表评论。