一个出版物隐藏了另一个出版物的嵌套字段

时间:2015-03-10 16:35:53

标签: javascript mongodb meteor

鉴于两个名为Foo的同一集合的出版物。 fooList应仅返回特定字段,但fooDetail应返回整个文档。

服务器:

Meteor.publish 'fooList', ->
    return Foo.find(
        {}
        { fields:
            foo: true
            'bar.bas': true
        })

Meteor.publish 'fooDetail', (foo_id) ->
    return Foo.find _id: foo_id

客户端:

Meteor.subscribe 'fooList'
Meteor.subscribe 'fooDetail', some_id

我希望在订阅fooDetail时获得完整的foo。 但是“bar”(嵌套文档)中的所有字段都不可用,除了“bar.bas”字段。

这是一个错误还是流星应该这样工作? (我目前正在使用Meteor 1.0.3.2和Iron-Router)

2 个答案:

答案 0 :(得分:3)

这不是一个错误,它是流星known limitationMergeBox。这是困扰大多数流星开发者一次的令人困惑的问题之一。

来自docs

  

如果多个订阅发送字段的冲突值(相同的集合名称,文档ID和字段名称),则客户端上的值将是任意选择的已发布值之一。

您可以看到this post可能的解决方法。在您的示例中,可以修改您的发布,如下所示:

Meteor.publish 'fooList', ->
  Foo.find {}, fields: foo: 1, bar: 1

这将发布所有顶级bar字段,以避免冲突但在您的特定用例中可能无法接受。

答案 1 :(得分:0)

你的酒吧/潜水员看起来不错。我的猜测是你没有增加fooDetail子的反应性。帮我一个忙:

  1. 将两个潜艇都放在铁路由器的waitOn上,并将静态值传递给fooDetail
  2. 在minimongo中验证其他字段是否为静态ID。
  3. 将子包裹在Template.Instance().autorun