Oracle NoSQL Node.js驱动执行count(*)返回0行 如何获取查询匹配总行数
解决方案
Oracle NoSQL的Node.js驱动默认单次查询返回结果集大小受限,count(*)这类聚合查询的结果通常需要多轮请求才能返回,仅发起单次请求大概率会拿到空行结果,可按以下方案实现行数统计:
- 给聚合列加别名避免返回列名解析异常,同时循环处理请求的续传键(continuationKey)直到所有结果返回,示例代码如下:
let totalRows = 0; const countStatement = `SELECT count(*) AS row_count FROM ${resource}`; const queryOptions = {}; // 循环处理多轮查询,直到没有续传键代表查询完成 do { const res = await this.client.query(countStatement, queryOptions); if (res.rows.length > 0) { totalRows = res.rows[0].row_count; } // 赋值下一轮请求需要的续传键 queryOptions.continuationKey = res.continuationKey; } while (queryOptions.continuationKey); // 最终totalRows就是匹配的总行数
- 如果是无筛选条件的全表行数统计,也可以直接调用表统计相关接口获取,适合对实时性要求不高的场景,性能远高于全表count查询。
如果你的count查询带有WHERE筛选条件,直接把筛选条件拼接在上述SQL语句中即可,逻辑不需要修改。
内容的提问来源于stack exchange,提问作者Joel Nation
相关产品推荐
相关产品推荐

