Mongodb 流星中的反应性是否受查询中选择的场的影响?
如果我的UI依赖于Mongodb 流星中的反应性是否受查询中选择的场的影响?,mongodb,meteor,Mongodb,Meteor,如果我的UI依赖于 MyCollection.find({_id: "..."}) 我知道,只要文档中的任何字段发生变化,它就会触发反应。但如果我只是从该文档中选择一个字段: MyCollection.find({_id: "..."}, {fields: { MyAttr: 1 }}) 对该id文档的任何更改都会触发反应性,还是仅对该文档的MyAttr字段的更改才会触发反应性?我做了一个简单的测试来确定这一点: test.html: <template name="test">
MyCollection.find({_id: "..."})
我知道,只要文档中的任何字段发生变化,它就会触发反应。但如果我只是从该文档中选择一个字段:
MyCollection.find({_id: "..."}, {fields: { MyAttr: 1 }})
对该id文档的任何更改都会触发反应性,还是仅对该文档的
MyAttr
字段的更改才会触发反应性?我做了一个简单的测试来确定这一点:
test.html:
<template name="test">
{{ #if Template.subscriptionsReady }}
{{ GetMyAttr }}
{{ /if }}
</template>
现在,当我在“jpBLBgCyEi3XpicxF”文档上手动更新MyOtherAttr
时,名为GetMyAttr的被记录到控制台。但如果我将find语句更改为:
return MyCollection.findOne({_id: "jpBLBgCyEi3XpicxF"}, {fields: {MyAttr: 1}}).MyAttr;
然后更新“jpBLBgCyEi3XpicxF”文档上的MyOtherAttr
不会导致打印名为GetMyAttr的
结论:游标仅对这些游标中返回的数据的更改作出反应。
回想起来,这似乎很明显,它应该这样做。我认为这是更经常地使用查询的{fields:{}}
部分的一个很好的理由,以减少不必要的反应。find
返回一个游标,游标被激活reactive@ThaiTran,我知道这是反应性的,更多的是它对什么反应的问题。它会对该文档中的任何更改做出反应,还是只对该领域的更改做出反应?这个问题毫无意义,因为它不清楚。。Thai Tran说整个返回的游标都是反应式的,所以什么不清楚?简短的回答不是:它只在您输出的字段上是反应式的。很抱歉,我误解了您原来的问题!你完全正确。
return MyCollection.findOne({_id: "jpBLBgCyEi3XpicxF"}, {fields: {MyAttr: 1}}).MyAttr;