Meteor:将所有用户发布到客户端

时间:2013-12-12 22:44:37

标签: meteor

为什么这不起作用?:

在客户端和服务器上:

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集合中仍然没有文档。我正在试图解决这个问题!

1 个答案:

答案 0 :(得分:22)

服务器上定义的Meteor集合与数据库中的集合具有1:1的关系。您在名为'allusers'的数据库中没有集合,因此该定义没有意义。您似乎对数据库集合和已发布结果集的概念感到困惑。

当您将帐户包添加到项目中时,meteor会在客户端和服务器上为您定义Meteor.users集合,因此您无需再次执行此操作。您的代码看起来很不错 - 只需删除new Meteor.Collection并通过Meteor.users.find访问用户。


收集定义说明

通过包

为您创建的集合
  • 示例:Meteor.usersaccounts
  • 创建
  • 注意:数据库中的集合是db.users。您可以通过执行Users = Meteor.users之类的操作,然后再调用Users.find()而不是Meteor.users.find()来使此集合看起来与您定义的其他集合一样。

在客户端和服务器上定义的集合

  • 示例:new Meteor.Collection('rooms')
  • 注意:在大多数项目中,这几乎都是你所做的。字符串'rooms'是数据库中集合的名称(db.rooms)。文档可以从服务器发布到客户端。

在客户端上定义但不在服务器上定义的集合

  • 示例:new Meteor.Collection('userCount')
  • 注意:服务器可以写入客户端集合,但不用于将数据同步到数据库。典型的用例是通知客户端有关另一个集合的大小或其他元数据。这里字符串'userCount'与数据库集合的名称不对应,而只是客户端和服务器商定的标识符。
  • 另请参阅:How To: Publish to a Client Only CollectionMeteor Subscribe and Display Users Count

在客户端上定义的非托管本地集合

  • 示例:new Meteor.Collection(null)
  • 注意:这些是在客户端想要具有集合语义但是不想使用该集合与服务器通信时定义的。典型的用例是演示应用程序,用户可以使用界面进行播放,但只能更改自己浏览器中的数据。