javascript - 对 Meteor.js 集合中的文档进行排序导致浏览器崩溃

标签 javascript node.js mongodb meteor

我正在尝试从具有 timestamp 字段的集合中检索最新的文档。但是,当将 sort 说明符与 find()findOne() 一起使用时,浏览器变得非常无响应,CPU 使用率猛增,偶尔会崩溃.

与使用 db.fruits.find().sort({timestamp: -1}) 直接查询 mongodb 相比,返回的排序结果也未正确排序。 timestamp 字段中的值示例是 2013-11-28 21:48:02db.fruits 中有 5000 多个文档,索引在 timestamp 上。

知道哪里出了问题吗?我在 Mac OSX Chrome 上使用 Meteor v0.6.6.3。

案例 1A:响应式

Template.fruits.fruit = function() {
    var fruit = Fruits.findOne({});
    return fruit;
}

<template name="fruits">
    <div>{{fruit.price}}</div>
</template>

案例 1B:无响应

Template.fruits.fruit = function() {
    var fruit = Fruits.findOne({},{sort:{timestamp: -1}});
    return fruit;
}

案例 2A:响应式

Template.fruits.fruit = function() {
    var fruit = Fruits.find({}, {limit :1});
    return fruit;
}

<template name="fruits">
    {{#each fruit}}
    <div>{{price}}</div>
    {{/each}}
</template>

案例 2B:无响应

Template.fruits.fruit = function() {
    var ticks = Ticks.find({}, {sort:{timestamp: -1}, limit :1});
    return fruit;
}

只发布最新的10个水果

David Weldon 建议

Meteor.publish('fruits', function(userId) {
    return Fruits.find({}, {sort:{timestamp: -1}, limit: 10});
});

它停止浏览器崩溃,并返回正确的结果!

最佳答案

我不确定 meteor 是否在将文档发送到客户端时不断尝试对文档进行排序(每次发送新文档时都会重新启动),或者它是否在执行排序之前阻塞了完整的结果集。无论哪种方式,我都强烈建议不要将数千个文档同步到客户端。正如您在示例中所说明的,它在网络和 CPU 方面都是资源密集型的。

您的目标应该是根据需要同步数据库的小子集。如果您需要对大型数据集进行操作,我建议您使用方法调用(并可能将结果缓存在服务器上)。

关于javascript - 对 Meteor.js 集合中的文档进行排序导致浏览器崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20291665/

相关文章:

javascript - grunt.js - 缩小文件时的多个目的地

数据结构不断增长的 MongoDB 性能

django - 使用 mongodb 的 django 和谷歌地图的 GIS 应用程序

python - 无法让 Pylons 与 mongokit 一起工作

javascript - 钛 SQLite ORDER BY 语句

javascript - D3 - 未捕获的类型错误 : Cannot read property 'length' of undefined

javascript - 如何声明给定类在 Facebook Flow 中实现接口(interface)?

node.js - Node-webkit 保护数据

javascript - JavaScript 中没有额外的 boolean 值转换

javascript - JS正则表达式拆分