一个发布对另一个发布隐藏嵌套字段

One publication is hiding nested fields from another publication

本文关键字:隐藏 嵌套 字段 布隐藏 另一个 一个      更新时间:2023-09-26

给定名为 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"字段。

这是一个错误还是流星应该以这种方式工作?(我目前在流星1.0.3.2和铁路由器上)

这不是一个错误,这是流星合并框的已知限制。这是困扰大多数流星开发人员的令人困惑的问题之一。

从文档中:

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

您可以查看此帖子以了解可能的解决方法。在您的示例中,您可以将发布修改为如下所示:

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

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

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

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