Meteor cursor.map():GOTCHA如何多次提取一个元素?

时间:2014-03-14 23:25:50

标签: javascript meteor cursor

如何将地图功能用于流星集合?

http://docs.meteor.com/#map

使用教程,我们有一个名为Posts的集合。

Posts.find()返回一个游标,让我遍历所有的游标 Posts.find()。fetch()会给我一个包含所有帖子的数组,但这可能是很多数据。

假设我只想在数组中使用Posts的一个元素,比如标题:我可以这样做:

titles=Posts.find().map(function(a) {return a.title}); // works

假设我想要标题和ownerIds。 我正在调试这个并做了:

a=Posts.find()
titles=a.map((function(a) {return a.title;}); // works
ownerIds=a.map((function(a) {return a.ownerId;}); //doesn't work, cursor already iterated over, returns empty array.

这不起作用。为什么呢?

2 个答案:

答案 0 :(得分:9)

您可以通过调用rewind来多次使用光标。来自文档:

  

forEach,map或fetch方法只能在游标上调用一次。要多次访问光标中的数据,请使用rewind重置光标。

所以这应该有效:

a=Posts.find()
titles=a.map((function(a) {return a.title;});
a.rewind();
ownerIds=a.map((function(a) {return a.ownerId;});

答案 1 :(得分:2)

<强> ANS: 它不起作用的原因是游标只能迭代一次。也就是说,游标不能与数组一样使用。

(其他人可能已经知道了这一点,但在我弄明白之前,我花了半个小时进行了无效的调试。)