在我们的应用程序中,我们使用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)如何获取查询返回的文档总数?
我想知道它在实际应用程序,最佳实践中是如何完成的。 感谢。