使用用于NodeJS的MongoDB驱动程序获取聚合结果的跳过,偏移,总信息

时间:2017-09-07 08:57:17

标签: node.js mongodb mongodb-query aggregation-framework

在我们的应用程序中,我们使用coll.find()方法查询数据,并返回Cursor实例,我可以从中检索客户端所需的所有数据。

const coll: Collection = await this.ensureCollection(collection);

let query = { ... };

let result: Cursor = await coll.find(query);

let total: Cursor = await coll.count(query);

let readResult = {
    offset: result.cursorState.skip,
    limit:  result.cursorState.currentLimit,
    total,
    data: result.toArray();
}

我试图将其移动到我们新过滤系统的聚合中。

const coll: Collection = await this.ensureCollection(collection);

let query = [{ $skip: ... }, { $limit: ... }];

let result = await coll.aggregate(query);

let limit: number;
let offset: number;

let limitPipeline: any = aggregationQuery.find(pipeline => (typeof pipeline.$limit !== 'undefined'));

if (limitPipeline) {
    limit = limitPipeline.$limit;
}

let offsetPipeline: any = aggregationQuery.find(pipeline => (typeof pipeline.$skip !== 'undefined'));

if (offsetPipeline) {
    offset = offsetPipeline.$skip;
}

let total: number = ???

let readResult = {
    offset,
    limit,
    total,
    data: result.toArray();
}

问题:

1)如何正确获得限制和偏移?我获得限制和抵消的方式并不安全。我在使用coll.find()方法时检索它们的方式并不适用于聚合。

2)如何获取查询返回的文档总数?

我想知道它在实际应用程序,最佳实践中是如何完成的。 感谢。

0 个答案:

没有答案