Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 流星中的反应性是否受查询中选择的场的影响?_Mongodb_Meteor - Fatal编程技术网

Mongodb 流星中的反应性是否受查询中选择的场的影响?

Mongodb 流星中的反应性是否受查询中选择的场的影响?,mongodb,meteor,Mongodb,Meteor,如果我的UI依赖于 MyCollection.find({_id: "..."}) 我知道,只要文档中的任何字段发生变化,它就会触发反应。但如果我只是从该文档中选择一个字段: MyCollection.find({_id: "..."}, {fields: { MyAttr: 1 }}) 对该id文档的任何更改都会触发反应性,还是仅对该文档的MyAttr字段的更改才会触发反应性?我做了一个简单的测试来确定这一点: test.html: <template name="test">

如果我的UI依赖于

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;