NeDB排序、分页与投影:用Cursor API实现复杂数据检索的完整指南
NeDB排序、分页与投影用Cursor API实现复杂数据检索的完整指南【免费下载链接】nedbThe JavaScript Database, for Node.js, nw.js, electron and the browser项目地址: https://gitcode.com/gh_mirrors/ne/nedbNeDB 是一个 100% JavaScript 编写的内嵌式数据库可用于 Node.js、nw.js、Electron 和浏览器无任何二进制依赖。当你需要在查询结果上做**排序sort、分页skip/limit和字段投影projection**时NeDB 提供的Cursor API可以让你用一行链式调用完成复杂的 data 检索。本文是一份面向新手的完整指南带你快速掌握 NeDB 排序、分页与投影的用法与常见坑点。NeDB 数据库的 Cursor API 是什么在 NeDB 中find、findOne和count都有两种调用方式传回调函数直接执行查询拿到结果不传回调函数返回一个Cursor对象你可以继续链式调用sort、skip、limit、projection最后用exec(callback)执行。这正是 MongoDB 风格的游标思想核心实现位于 lib/cursor.jsdb.find({}).sort({ planet: 1 }).skip(1).limit(2).exec(function (err, docs) { // docs 是排序、跳过、截取后的结果集 });find返回 Cursor 的入口逻辑见 lib/datastore.js。一行代码实现排序NeDB sort 用法sort接收一个{ 字段: 方向 }对象1表示升序-1表示降序也支持多字段组合排序和点语法嵌套字段// 按 planet 升序 db.find({ system: solar }).sort({ planet: 1 }).exec(function (err, docs) {}); // 降序 db.find({ system: solar }).sort({ planet: -1 }).exec(function (err, docs) {}); // 多字段先按 firstField 升序再按 secondField 降序 db.find({}).sort({ firstField: 1, secondField: -1 }).exec(function (err, docs) {}); 内部机制NeDB 在排序完成后才应用skip和limit见 lib/cursor.js因此无论你在链式调用中把sort放在哪里分页永远作用在排序后的结果上顺序符合直觉。快速分页NeDB skip 与 limit 组合技巧分页只需两个方法skip(n)跳过前 n 条limit(n)最多取 n 条。两者都可以省略也可以组合// 第 2 页每页 10 条 db.find({}).sort({ createdAt: -1 }).skip(10).limit(10).exec(function (err, docs) {});方法作用示例sort按字段排序1 升序 / -1 降序.sort({ age: -1 })skip跳过前 N 条结果.skip(20)limit最多返回 N 条结果.limit(10)projection只保留 / 排除部分字段.projection({ name: 1 })exec执行查询并回调结果.exec(cb)⚠️关键提醒skip和limit只是把参数存进游标在exec时才统一生效所以调用先后顺序不影响结果。但如果不加sort结果顺序是不确定的见 test/cursor.test.js 中的测试说明做分页时务必先排序否则翻页内容会漂移。NeDB 投影 projection只取你需要的字段投影决定返回文档中包含哪些字段语法与 MongoDB 一致值1表示保留值0表示排除。你有两种等价的写法写法一作为 find 的第二个参数// 只保留 planet 和 system 字段_id 默认保留 db.find({ planet: Mars }, { planet: 1, system: 1 }, function (err, docs) { // docs is [{ planet: Mars, system: solar, _id: id1 }] });写法二游标链式调用db.find({ planet: Mars }).projection({ planet: 1, system: 1 }).exec(function (err, docs) {});三条实用规则不能混用保留与排除{ planet: 1, system: 0 }会抛出Cant both keep and omit fields except for _id错误校验逻辑见 lib/cursor.js_id特殊默认始终返回显式写_id: 0可将其排除且它允许与保留/排除模式混用支持点语法投影嵌套字段db.findOne({ planet: Earth }).projection({ planet: 1, humans.genders: 1 }).exec(function (err, doc) { // doc is { planet: Earth, _id: id2, humans: { genders: 2 } } }); 投影在排序、分页之后执行见 lib/cursor.js所以排序字段不需要出现在投影结果里可以安全地把大字段裁掉再返回给前端。实战组合排序 分页 投影一次搞定以一个最新订单列表为例按创建时间倒序、取第 3 页每页 10 条、只返回下单人和金额字段db.find({ paid: true }) .sort({ createdAt: -1 }) .skip(20) .limit(10) .projection({ buyer: 1, amount: 1 }) .exec(function (err, docs) { // docs 为第 3 页的 10 条精简记录 });配合count可以得到总条数、计算总页数count底层同样复用游标见 lib/datastore.jsdb.count({ paid: true }, function (err, total) { // totalPages Math.ceil(total / 10) });新手常见坑点速查问题原因解决翻页内容不稳定未排序就分页先.sort()再.skip().limit()投影报Cant both keep and omit混用了1和0统一用保留或统一用排除_id除外只想要第一条却返回多条用了find而非findOnefindOne内部自动limit(1)lib/datastore.js传了回调却无法链式排序find(query, callback)立即执行需要排序/分页时不要传回调改传投影或干脆省略延伸阅读核心源码与测试游标全部实现sort/skip/limit/projection/execlib/cursor.jsfind/findOne/count与游标的衔接lib/datastore.js排序、分页、投影的完整测试用例test/cursor.test.js查询性能基准benchmarks/find.js官方文档对应章节README.md掌握 NeDB 的 Cursor API 后排序、分页、投影这些复杂数据检索需求只需一行链式调用即可完成。配合内嵌式数据库的零依赖特性它非常适合 Electron 桌面应用和浏览器端的本地数据场景。【免费下载链接】nedbThe JavaScript Database, for Node.js, nw.js, electron and the browser项目地址: https://gitcode.com/gh_mirrors/ne/nedb创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

YuE2-3B+ABC记谱:可编辑可验证的AI音乐创作工作流

YuE2-3B+ABC记谱:可编辑可验证的AI音乐创作工作流

1. 这不是“AI写歌”玩具,而是一套可落地的音乐创作工作流最近在AIGCPanel上跑通YuE2-3B模型,我连续三天没碰吉他,就盯着屏幕调参数、改ABC记谱、听生成音频反复对比——不是被炫技吸引,而是它真能解决我卡了半年的三个实际问题&a…

2026/9/20 12:02:43 阅读更多 →
CC Switch 接 TaoToken:一次配置切换出三个模型供应商

CC Switch 接 TaoToken:一次配置切换出三个模型供应商

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 9:49:23 阅读更多 →
BMad 头脑风暴(bmad-brainstorming)实战指南:用 100+ 种构思方法把模糊想法推进到可执行方向

BMad 头脑风暴(bmad-brainstorming)实战指南:用 100+ 种构思方法把模糊想法推进到可执行方向

BMad 头脑风暴(bmad-brainstorming)实战指南:用 100 种构思方法把模糊想法推进到可执行方向 【免费下载链接】BMAD-METHOD Breakthrough Method for Agile Ai Driven Development 项目地址: https://gitcode.com/gh_mirrors/bm/BMAD-METHOD…

2026/9/20 12:02:19 阅读更多 →

最新新闻

CC Switch 接 TaoToken:把 Kimi K2.7 Code 设成默认供应商

CC Switch 接 TaoToken:把 Kimi K2.7 Code 设成默认供应商

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 12:03:23 阅读更多 →
Roo Code 实战:TaoToken 跑通 TypeScript monorepo 修复类型错误

Roo Code 实战:TaoToken 跑通 TypeScript monorepo 修复类型错误

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 12:03:23 阅读更多 →
每日算法快闪赛30分钟极速提升做不到?TaoToken 这样给 Codex 配 Key

每日算法快闪赛30分钟极速提升做不到?TaoToken 这样给 Codex 配 Key

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 12:03:23 阅读更多 →
ESP32-P4 USB Host实战:从零解析鼠标HID报告描述符

ESP32-P4 USB Host实战:从零解析鼠标HID报告描述符

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 12:03:23 阅读更多 →
开源uni-app+Java借贷APP系统:从申请到结清的完整业务源码解析

开源uni-app+Java借贷APP系统:从申请到结清的完整业务源码解析

简介:面向需要快速搭建线上借贷业务的技术团队、独立开发者及高校相关专业学生,这套全开源借贷 App 系统提供 uni-app 跨平台前端与 Java 后端分离架构,覆盖移动端、管理后台、服务端及数据库等完整工程链路。压缩包共 8 个文件,核…

2026/9/20 12:03:23 阅读更多 →
OAI数据集申请与下载全流程:从账号注册到DICOM处理

OAI数据集申请与下载全流程:从账号注册到DICOM处理

1. 为什么OAI数据集值得折腾这一整套流程如果你正在做医学影像相关的算法研究,尤其是骨关节、肌肉骨骼方向的深度学习项目,大概率绕不开OAI数据集。OAI全称Osteoarthritis Initiative,是一个长期跟踪膝关节骨关节炎的大规模公开研究队列&…

2026/9/20 12:02:23 阅读更多 →

日新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →