collection.all().limit(n) 在 FOXX 中不起作用

问题描述 投票:0回答:1

我的 FOXX play 应用程序中有此代码

var geodata = new Geodata(
  applicationContext.collection('geodata'),
  {model: Geodatum}
);

/** Lists of all geodata.
 *
 * This function simply returns the list of all Geodatum.
 */
controller.get('/', function (req, res) {
  var parameters = req.parameters;
  var limit = parameters['limit'];
  var result = geodata.all().limit(10);
  if (limit != "undefined") {
    result = result.slice(0, limit);
  }
  res.json(_.map(result, function (model) {
    return model.forClient();
  }));
});

根据文档,我应该能够在此处使用分页 - 我想通过给定的“限制”参数限制搜索结果,但这给了我一个错误

2016-05-16T14:17:58Z [6354] ERROR TypeError: geodata.all(...).limit is not a function
arangodb foxx
1个回答
1
投票

文档指的是集合。您似乎正在使用 Foxx 存储库。 Foxx 存储库是集合的包装器,提供大部分相同的方法,但它们不是返回普通文档(或游标),而是将结果包装在 Foxx 模型中。

在你的情况下,看起来你可能根本不想使用 Foxx 模型(你只是将它们转换回文档,可能只是删除一些属性,如

_rev
_id
),所以你可以简单地放弃完全存储库并使用您直接传递到其中的集合:

var geodata = applicationContext.collection('geodata');

/** Lists of all geodata.
 *
 * This function simply returns the list of all Geodatum.
 */
controller.get('/', function (req, res) {
  var parameters = req.parameters;
  var limit = parameters['limit'];
  var result = geodata.all().limit(10);
  if (limit != "undefined") {
    result = result.slice(0, limit);
  }
  res.json(_.map(result, function (doc) {
    return _.omit(doc, ['_id', '_rev']);
  }));
});

您不是第一个对存储库和集合之间的区别感到困惑的人,这就是为什么存储库和模型将在即将发布的 3.0 版本中消失(但如果需要,您仍然可以在旧版 2.8 兼容服务中使用它们) ).

© www.soinside.com 2019 - 2024. All rights reserved.