如何在javascript中操作返回的mongo集合/游标(meteor.js)

how to manipulate returned mongo collections / cursors in javascript (meteor.js)?

本文关键字:游标 集合 meteor js mongo javascript 返回 操作      更新时间:2023-09-26

在使用meteorl .js和Mongo时,我使用find({一些参数})和find({一些参数}).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);
}

或coffeescript

中的等价内容
names = Entries.find({}).fetch()
listTitles = []
for i in names
    listTitles.push(i.title)

可以工作,但我不知道这是正确的方式,甚至是半理智的方式。

你的第一个问题之前已经问过了——也可以看看这篇文章。简短的回答是,除非您真的需要一次操作所有数据,以便在将其发送到模板之前对其进行操作,否则您希望使用find返回的游标。

你的CoffeeScript可以重写为:

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

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

titles = _.pluck Entries.find().fetch(), 'title'

要在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 });