找出所有在Meteor.js集合上收听的查询

时间:2014-01-10 05:29:36

标签: meteor

在Meteor 0.7.0.1中,是否可以计算/找出当前正在收听特定集合的所有查询?

我正在尝试创建一个函数:每当监听特定查询的用户数量(例如:myCollection.find({color:'red'})变为非零时),每当文档被更改/添加到第二个集合时执行函数{ {1}}。

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++;}
});
}

我没有测试过这个,但我希望它对你有用。您没有提供太多关于您的问题的详细信息,因此如果您或我需要澄清某些内容,请随时在下面发表评论。