如何重置mongodb聚合限制

Posted

技术标签:

【中文标题】如何重置mongodb聚合限制【英文标题】:How to reset mongodb aggregation limit 【发布时间】:2016-05-26 13:05:44 【问题描述】:

来自 mongodb 游标限制的文档

limit() 值为 0(即 .limit(0))相当于设置 no 限制。

但我找不到在mongodb aggregation limit docs 中重置查询限制的方法。

 const listQuery = query.limit(20).exec(); //  I need limit here
 query.limit(0); // error here
 const totalQuery = query.group(....).exec(); // No limit must be specified

我遇到错误

MongoError:限制必须是正数

感谢回复!

【问题讨论】:

【参考方案1】:

我编写了从聚合中重置任何管道命令的函数

Aggregate.prototype.reset = function (command, onlyLatest) 
  command = command.replace(/^/, '$');
  let i   = this._pipeline.length;
  while (i--) 
    if (command === Object.keys(this._pipeline[i])[0]) 
      this._pipeline.splice(i, 1);
      if (onlyLatest) 
        break;
      
    
  
  return this;
;

示例,在有分页时很有用

  var query = this.aggregate();
  query.match( ... );
  query.lookup( ... );
  query.unwind( ... );
  query.project( ... );
  query.sort(...);
  query.skip();
  query.limit(10);

  const listQuery  = query.exec();
  const totalQuery = query.reset('limit').reset('skip').exec();

  return Promise.all([listQuery, totalQuery]);

【讨论】:

以上是关于如何重置mongodb聚合限制的主要内容,如果未能解决你的问题,请参考以下文章

Mongodb 聚合管道限制 $lookup 字段

Mongodb:聚合排序限制查询的索引?

如何使用MongoDB聚合进行分页?

MongoDB 聚合Group

MongoDB: 聚合框架

mongodb - 聚合游标计数