是否可以简单地用 meteor-presence 显示在线用户数(当前登录) ?
我看到 Meteor.presences
集合中的文档默认情况下不会删除自身,因此简单的 Meteor.presences.find().count()
不是我想要的值寻找...我应该手动删除它们还是应该检查每个文档是否有 userID
字段?
编辑:
为了更多地说明发生在我身上的事情,我尝试在 2 个不同的浏览器中使用 2 个不同的用户登录。调用 Meteor.presences
后,我可以在我的集合中看到两个文档,例如
docs: {
djF3noxe3AhxDRfZw: {
_id: "djF3noxe3AhxDRfZw",
state: "online",
userId: "SDeLPJzoabFt4Knei"
}, {
t4r2Q7KGKji4FPS9s: {
_id: "t4r2Q7KGKji4FPS9s",
state: "online",
userId: "5zvYoC37aXSADGNEg"
}
}
闲置几分钟后,两个文档看起来都一样。与一名用户注销(调用 Meteor.logout()
)后,我仍然有 2 个文档(即使在几分钟后),唯一的区别是其中一个不再有 userID
:
docs: {
djF3noxe3AhxDRfZw: {
_id: "djF3noxe3AhxDRfZw",
state: "online"
}, {
t4r2Q7KGKji4FPS9s: {
_id: "t4r2Q7KGKji4FPS9s",
state: "online",
userId: "5zvYoC37aXSADGNEg"
}
}
仅在关闭该浏览器窗口后,关联的文档才会自行删除。
因此,如果我在两个窗口都打开时调用 Meteor.presences.find().count()
,我总是会得到 2
作为返回,无论用户在线/离线状态。
我目前使用的所有代码都是示例中的代码:
Meteor.publish('userPresence', function() {
var filter = {};
return Meteor.presences.find(filter, {fields: {state: true, userId: true}});
});
最佳答案
我也看到了同样的事情,这也让我感到困惑。但仔细想想,查看页面的访问者也是存在的,但没有 userId。因此,任何参观者都会出现在收藏中,这是有道理的。
如果您只想查看登录的用户,您可以将过滤器更改为
var filter = {userId: {$exists: true}};
关于meteor - 通过 meteor 存在获得大量在线用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16399666/