为什么这不起作用?:
在客户端和服务器上:
AllUsers = new Meteor.Collection('allUsers');
仅在服务器上:
Meteor.publish('allUsers', function() {
return Meteor.users.find();
});
仅限客户:
Deps.autorun(function(){
Meteor.subscribe("allUsers");
});
启动此应用程序后,AllUsers.find()。count()为零,但在终端中执行db.users.find.count()会得到正确的数字(3)。即使我在浏览器中添加了一个新用户(使用标准的ui-accounts包形式),这肯定会导致用户集合发生变化,但我的AllUsers集合中仍然没有文档。我正在试图解决这个问题!
答案 0 :(得分:22)
服务器上定义的Meteor集合与数据库中的集合具有1:1的关系。您在名为'allusers'
的数据库中没有集合,因此该定义没有意义。您似乎对数据库集合和已发布结果集的概念感到困惑。
当您将帐户包添加到项目中时,meteor会在客户端和服务器上为您定义Meteor.users
集合,因此您无需再次执行此操作。您的代码看起来很不错 - 只需删除new Meteor.Collection
并通过Meteor.users.find
访问用户。
Meteor.users
由accounts
包db.users
。您可以通过执行Users = Meteor.users
之类的操作,然后再调用Users.find()
而不是Meteor.users.find()
来使此集合看起来与您定义的其他集合一样。new Meteor.Collection('rooms')
'rooms'
是数据库中集合的名称(db.rooms
)。文档可以从服务器发布到客户端。new Meteor.Collection('userCount')
'userCount'
与数据库集合的名称不对应,而只是客户端和服务器商定的标识符。new Meteor.Collection(null)