【问题标题】:collection.all().limit(n) not working in FOXXcollection.all().limit(n) 在 FOXX 中不起作用
【发布时间】:2016-05-18 06:14:55
【问题描述】:

我的 FOXX 播放应用程序中有这段代码

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();
  }));
});

根据文档,我应该可以在这里使用分页 - 我想通过给定的 'limit' 参数限制搜索结果,但这会给我一个错误

2016-05-16T14:17:58Z [6354] ERROR TypeError: geodata.all(...).limit is not a function

https://docs.arangodb.com/SimpleQueries/Pagination.html

【问题讨论】:

    标签: arangodb foxx


    【解决方案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 兼容的旧服务中使用它们)需要)。

    【讨论】:

      猜你喜欢
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多