【问题标题】:How to subscribe to changes by field within a single document如何在单个文档中按字段订阅更改
【发布时间】:2012-11-21 04:53:53
【问题描述】:

我正在尝试找出订阅单个文档中特定更改的正确模式。一个例子将更好地突出我正在尝试做的事情。比如说,我有一个用于博客文章的 Mongo 文档,其中又包含一个 cmets 列表。现在,我有一个查询可以找到该博客文章:Posts.findOne("<id">),它会响应式更新我的模板:

<template name="post">
    <h1>{{title}}</h1>
    {{#each comments}}
        {{> comment this}}
    {{/each}}
</template>

问题在于,当该帖子发生任何变化时(通常是人们添加它们时的 cmets 列表),查看该帖子的每个人都会刷新整个内容。我宁愿 1) 设置某种特定于字段的侦听器,和/或 2) 进行一些手动拦截以说“发布更新时,检查更新的内容,并根据更改的内容更新某些内容(例如,仅更新已更新的评论,或者,看起来有一条新记录 - 让我们添加它)”。

我知道在文档级别使用Collection.observe 是可行的(例如,随着新文档的出现和消失,您可以精细控制以查看发生了什么变化),但是在文档内部呢?我想我可以通过将当前文档存储在会话中来做到这一点,然后当文档更新并且我收到响应式查找命令的通知时,将新文档与旧文档进行比较,但这是最好的方法吗?我错过了什么明显的东西吗?

非常感谢任何指导!

【问题讨论】:

  • 我能问一下为什么整个帖子重绘有什么问题吗?
  • 博客文章/评论示例只是我正在做的一个简单版本。也许与我实际所做的更接近的例子是谷歌文档。人们正在编辑同一个文档(嗯,该文档的各个区域/部分),我想修补对文档的更改,而不是每次有任何更改时都完全刷新整个内容。

标签: meteor


【解决方案1】:

我也在学习 Meteor(几周后),遇到了你描述的问题。目前我的建议是让您的应用订阅 2 个集合:帖子评论

评论项可能如下所示:

{ _id : \\ Mongo 自动生成的 ID, text : '这是评论', PostID : 'postUniqueID' 用户:'用户名' //ETC。 }

在客户端,在您的 评论 订阅中,您将帖子的唯一 ID 作为参数传递。在服务器端,您只发布 PostID = postUniqueID 的评论。

重要提示:您需要在 Meteor.autorun() 块中设置您的 Comments 订阅,以便在用户切换到另一篇博文时它会更改。

根据我的经验,这种方法使您的模板和编码变得更加简单。但是,我没有分析订阅两个集合(相对于一个)是否会对 Meteor 的性能产生显着影响。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-20
    • 1970-01-01
    • 2018-01-02
    • 2022-09-23
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    • 2018-08-31
    相关资源
    最近更新 更多