MongoDB 上的 Meteor 反应有多深或多少级

How deep or how many levels is Meteor reactivity on the MongoDB

流星反应性是否适用于深层或嵌入式文档。想知道我应该如何构建我的数据库是否有限制,还有他们需要考虑的任何流星反应性能。

我知道这很好

{
   _id: "joe",
   name: "Joe Bookreader"
}

但是这个呢

{
   _id: "joe",
   name: "Joe Bookreader",
   addresses: {
                {
                  street: "123 Fake Street",
                  city: "Faketon",
                  state: "MA",
                  zip: "12345"
                }

              }
 }

或者这个

{
   _id: "joe",
   name: "Joe Bookreader",
   addresses: {
                {
                  street: "123 Fake Street",
                  city: "Faketon",
                  settings: 
                  {
                   false: true,
                   power: false
                  }
                  state: "MA",
                  zip: "12345"
                }
              }
 }

就一个,顶层而已。 Meteor 通过一种称为合并框的机制通过 DDP 将数据集更改传达给客户端。这是由 livedata 管理的,它本身现在是 DDP 包的一部分。

Meteor 通过区分初始值和新值来寻找文档顶级字段的更改,然后将差异值发送到客户端,以便它应用到当前状态并通过 Tracker 更新所有相关对象和方法方法。

因此,对于您的示例,'address.city''MA' 更改为 'NY''address.settings.false'true 更改为 false 将使整个文档并导致计算重新运行。

不过,Blaze 是一项非常智能的 dom 技术。尽管它对使用这些更改文档的模板的计算需要重新运行,但通常情况下,它可以检测更改是否实际上 dom 相关,并采取相应的行动。不过,这不是 100% 的保证。

作为参考,您可以在 meteorhacks and you should also see for yourself how the document diffing works on the source of livedata server 阅读 merge-box 的很好的总结,尤其是 diffDocument 方法和相关方法。