Meteor发布或订阅只返回一个对象时返回一个对象数组

时间:2017-02-05 00:36:48

标签: mongodb reactjs meteor

我正在尝试发布一个发布,它返回代码属性等于用户selectedGroup的组。

Meteor.publish('selectedGroup', function () {
  return Groups.findOne({
    code: Meteor.users.findOne(this.userId).profile.selectedGroup
  })
})

,订阅看起来像这样

Meteor.subscribe('selectedGroup')
return {
  group: Groups.find({}).fetch()
}

但我得到的是用户所属的所有组的数组,而不是发布应该返回的组。

即使我执行findOne(),它也会返回第一个对象,而不是发布应该返回的对象。

1 个答案:

答案 0 :(得分:1)

首先,您不应在出版物中使用findOne - 出版物应返回光标;在这种情况下,您将发布单文档游标(只要组中的单个文档与查询匹配)。只需在出版物中使用find即可。

其次,当您在客户端上获取数据时,应该使查询具体化。目前,您正在获取客户订阅的所有组(可能是您正在运行其他出版物和订阅。)有关Meteor指南的建议,请参阅here。你想在你的容器中做这样的事情:

return {
  group: Groups.findOne({
    code: Meteor.users.findOne(this.userId).profile.selectedGroup
  })
}

最后,如果您的用户的selectedGroup可以更改,您应该知道出版物提供的数据可能会更改,但他们的查询不能更改。因此,如果用户的selectedGroup发生更改,则发布将不会反映此情况 - 因为其查询不会更改。见here。因此,您需要使用reactive publish package来处理此问题。