【问题标题】:Emberjs not returning all recordsEmberjs 不返回所有记录
【发布时间】:2015-07-02 08:56:04
【问题描述】:

我正在使用由 Sails 和 Emberjs 组成的 SANE 堆栈。我也使用 MongoDB 作为数据存储。

当我在 Sailsjs 方面执行以下操作时;

Parent.find(req.query.id).populate('children').exec(function(err, parent){
  console.log('children.length = ' + parent[0].children.length);
});

我得到 212

但是当我在 Emberjs 方面执行以下操作时;

parent.get('children').then(function(children){
  console.log('children.length = ' + children.length);
});

我得到 30。

事实上,一旦记录数超过 30 条,则 ember 只返回 30 条记录也没关系。

有什么方法可以得到其余的记录吗?我实际上需要记录,以便我可以排序和计算一些东西。我不只是展示它们。

任何帮助将不胜感激。

【问题讨论】:

  • 您是否验证了 EmberJS 触发的请求实际上返回了这 30 条记录?
  • 是的。当我有。当我查看 ember 检查器时,它显示了 31 条记录。我认为其中一条记录可能是在客户端创建的,但尚未保存到服务器。但无论哪种方式,它肯定不会返回所有记录。是否有一些配置可以阻止 emberjs 带回超过 30 条记录?也许是为了防止结果集“太大”之类的?
  • 详细讨论的好地方:gitter.im/balderdashy/sails
  • @TravisWebb 谢谢。我在gitter.im/artificialio/sane 发帖,因为那是我正在使用的堆栈。但我会尝试 gitter.im/balderdashy/sails 看看他们是否也有任何建议。

标签: mongodb ember.js sails.js limit resultset


【解决方案1】:

说明

这是因为 Sails 中的默认响应限制是 30 条记录。它显然存在,因此如果您有 10k 或 100 万行,您不会发出一些正常的请求,并且会不小心将整个数据库转储到客户端并导致一切崩溃。

这在此处记录:

http://sailsjs.org/documentation/reference/configuration/sails-config-blueprints

defaultLimit(默认值:30)

响应中显示的默认记录数 从“查找”动作。双倍作为填充数组的默认大小 如果填充为真。

它也记录在您的sails 应用程序的config/blueprints.js 文件中: https://github.com/balderdashy/sails-generate-backend/blob/master/templates/config/blueprints.js#L152-L160.

这里是相关代码:https://github.com/balderdashy/sails/blob/master/lib/hooks/blueprints/actionUtil.js#L291

解决方案

  1. 在您的config/blueprints.js 文件中编辑defaultLimit

  1. &limit=<number> 添加到您的http 请求网址

【讨论】:

  • @Travis_Webb 谢谢!我认为它是这样的,这是可以理解的。但是,当我在风帆控制台上时,我可以一次打印出我的 212 个对象。他们并没有止步于 30 条记录。这就是为什么我认为这是一个余烬问题。我想我可能需要在sails 中处理服务器端而不是ember 中的客户端。或者,有没有办法在 http 请求 URL 中“偏移”?基本上这样你就可以得到 1-30,然后是 31-60,等等......
  • 是的,因为sails 控制台不使用蓝图限制。你让这比现在更复杂。只需更改 defaultLimit 即可。
  • 是的,但这无法扩展。如果我的结果集通过了defaultLimit。然后我需要对“有限”结果集运行查询,然后对剩余的结果集运行查询。是否有类似 activerecord 的 find_each 或 find_in_batches 方法? api.rubyonrails.org/classes/ActiveRecord/Batches.html 这允许您批量运行查询。我已将此发布到另一个问题,以防万一这离题了。 stackoverflow.com/questions/31226883/…
  • 不,您的查询将针对整个数据库运行,正如您所期望的,无论您的 defaultLimit 设置如何。我不知道你为什么这么难。如果您使用defaultLimit,一切都会像明智的人所期望的那样正常工作。没有问题。就用它吧。
  • @Travis_Webb,感谢您的帮助。我试图对此保持理智。我可能会遗漏一些东西,但我认为如果我的结果集不断增长,我所关心的是要设置什么限制。我认为这就是find_each 在活动记录中的原因。这就是你在回答我关于 defaultLimit 的帖子时所说的。 很明显,如果你有 10k 或 100 万行,你就不会发出一些正常的请求,并且不小心将整个数据库转储到客户端并导致一切崩溃
猜你喜欢
  • 2019-05-26
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
  • 1970-01-01
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多