如何在javascript中操作返回的mongo集合/游标(meteor.js)
how to manipulate returned mongo collections / cursors in javascript (meteor.js)?
在使用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 });
相关文章:
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- Meteor-将选定窗体中的对象添加到集合中
- 主干集合重置和解析
- 使用数据上的角度更改设置集合的第一个元素的动画
- 为集合分配大量的模型弹药
- 如何使用backbone.js从集合中获取模型名称
- Lodash从集合创建集合
- 2个backbone.js集合,具有相同的模型,但排序顺序不同
- CSS中的游标属性似乎不适用于USB On The Go
- 如何合并不同集合的游标并按日期排序
- 将当前用户的 ID 推送到 meteorjs 中集合/文档的内部数组
- 使用它更新集合中的嵌套数组's索引
- 主干-从模板中迭代的集合中获取特定的模型
- 微风得到的是实体而不是对象的集合
- 如何从游标(集合)中检索n个文档的组
- 我如何保证节点's mongodb模块游标和/或集合'toArray()使用Bluebird
- 如何在javascript中操作返回的mongo集合/游标(meteor.js)
- 当发布的游标基于另一个集合内容时,如何构建响应式发布
- 同一集合的流星合并游标
- 在调试流星客户端时,如何查看集合或游标内容