10

在使用 Meteor.js 和 Mongo 时,我使用 find({ some arguments }) 和有时 find({ some arguments }).fetch() 分别返回游标和匹配文档的数组。

两者之间的真正区别是什么?(我什么时候使用一个与另一个?)

操作/迭代这些类型的返回对象的正确方法是什么?

例如,我有一个包含许多文档的集合,每个文档都有一个标题字段。

我的目标是获取所有标题字段值的数组,例如 [doc1title,doc2title,doc3title]

我这样做了:

var i, listTitles, names, _i, _len;
names = Entries.find({}).fetch();
listTitles = [];
for (_i = 0, _len = names.length; _i < _len; _i++) {
    i = names[_i];
    listTitles.push(i.title);
}

或咖啡脚本中的等价物

names = Entries.find({}).fetch()
listTitles = []
for i in names
    listTitles.push(i.title)

哪个有效,但我不知道它是正确的方式还是半理智的方式。

4

2 回答 2

14

您的第一个问题之前已被问- 另请参阅帖子。简短的回答是,您希望使用返回的光标,find除非您确实需要一次所有数据以便在将其发送到模板之前对其进行操作。

您的 CoffeeScript 可以重写为:

titles = (entry.title for entry in Entries.find().fetch())

如果你使用下划线,它也可以写成:

titles = _.pluck Entries.find().fetch(), 'title'
于 2013-05-22T05:40:35.923 回答
11

要遍历 js 中的游标,只需使用cursor.forEach

const cursor = Collection.find();
cursor.forEach(function(doc){
  console.log(doc._id);
});

将游标转换为数组时,您还会发现.map()函数很有用:

const names = Entries.find();
let listTitles = names.map(doc => { return doc.title });
于 2015-01-19T23:47:17.997 回答