
一、Studio 3T 里 aggregate 返回空数组问题往往不在数据如果你正在用 Studio 3T 的 shell 跑 MongoDB 聚合管道$lookup写完执行结果直接给你一个空数组[]或者条数明显不对——这篇就是写给你的。场景很具体student和class两个集合用$lookup按localField/foreignField关联再叠$match过滤“小九”“小明”用$unwind拆course数组最后写$skip和$limit。语句看着没问题但结果就是不对。Studio 3T 只给结果不给解释你盯着那个空数组根本不知道是哪一级管道出了问题。这时候可以换个思路把那条 aggregate 语句原样复制出来连同空结果一起交给走 TaoToken 通道的 Codex 做逐级管道排查。TaoToken 在这里只负责给 Codex 供 Key 和通道判断管道顺序对错还是靠对照$lookup → $unwind → $match → $skip → $limit这条链路本身。先打开 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 注册账号并创建 Key后面配置会用到。需要强调的是不要让任何工具去连你的数据库。你要做的是本地操作——在 Studio 3T 的 shell 里执行语句把语句和结果复制出来交给 Codex 做静态分析。数据库连接始终留在你自己的 Studio 3T 里。二、TaoToken 前置给 Codex 配一条可用的通道Codex 默认走的是官方通道很多人在这一步卡住。这里改成用 TaoToken 供 Key 和通道配置方式很简单。第一步打开 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 注册账号。注册完成后进入控制台在 API Keys 页面创建一个新的 Key。这个 Key 就是后面填进 Codex 配置里的凭证。第二步记住两个地址的区别官网地址注册、控制台、文档https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endAPI Base URL填进 Codex 配置https://taotoken.net/api注意Codex 里不要填官网地址Base URL 一律写https://taotoken.net/api。这是最常见的配置错误之一填错会直接导致请求 404 或鉴权失败。第三步拿到 Key 之后你需要配通的是Codex 能读懂你粘贴的 Mongo 聚合语句并逐段指出先$match还是先$lookup、$skip是否写在了$limit后面。配通之后你回 Studio 3T 刷新执行验证即可。如果你还没创建 Key可以直接去 API Keys 页面https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite三、可复制配置Codex 接入 TaoToken 的完整步骤这一节给出可以直接复制的配置。Codex 的配置文件通常是config.toml如果你用的是 Claude Code 体系则对应settings.json和ANTHROPIC_*环境变量。下面分别说明。3.1 Codex 的 config.toml 配置找到 Codex 的配置目录编辑config.toml填入以下内容model_provider taotoken model YOUR_MODEL_ID [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key TAOTOKEN_API_KEY然后在环境变量里设置你的 Keyexport TAOTOKEN_API_KEYYOUR_API_KEYWindows 用户可以在系统环境变量里添加TAOTOKEN_API_KEY值填你创建的 Key。3.2 Claude Code 的 settings.json 配置如果你用的是 Claude Code配置方式不同。编辑settings.json填入{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: YOUR_API_KEY } }注意ANTHROPIC_BASE_URL写的是https://taotoken.net/api不要带官网的 UTM 参数也不要写成官网首页地址。3.3 CLI 方式如果标题涉及 CLI如果你更习惯命令行可以全局安装 TaoToken CLInpm i -g taotoken/taotoken然后用一条命令启动 Claude Code 通道taotoken cc -k YOUR_API_KEY -u https://taotoken.net/api -m YOUR_MODEL_ID其中-k后面填你的 Key-u后面填 API 地址-m后面填模型 ID。这条命令适合快速验证通道是否配通。3.4 配置检查清单配完之后对照检查Base URL 是否为https://taotoken.net/api不是官网首页Key 是否从控制台正确复制注意不要有多余空格模型 ID 是否填写正确环境变量是否在当前终端会话生效如果配置过程中遇到问题可以查阅接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite四、验证请求把 aggregate 语句交给 Codex 逐级排查配置完成后验证方式很直接在 Codex 里粘贴你的 aggregate 语句和空结果让它逐级分析管道顺序。4.1 准备要粘贴的内容在 Studio 3T 的 shell 里执行你的 aggregate 语句比如db.getCollection(student).aggregate([ { $lookup: { from: class, localField: id, foreignField: stuid, as: student_class }}, { $match: { name: 小九 } }, { $unwind: $course }, { $skip: 1 }, { $limit: 2 } ])如果返回空数组把这条语句和结果一起复制出来。4.2 让 Codex 逐级检查把语句粘贴给 Codex让它按管道顺序逐级检查。重点检查项$lookup的from是否写错集合名class还是classeslocalField和foreignField是否对应正确id对stuid$match放在$lookup之前还是之后过滤条件是否依赖关联后的字段$unwind是否放在了$match之前导致过滤掉了数组为空的文档$skip是否写在了$limit后面顺序颠倒会导致条数不对Codex 会逐段指出问题所在比如“你的$match依赖student_class.master但$match写在了$lookup之前此时student_class字段还不存在所以匹配为空”。4.3 回 Studio 3T 验证根据 Codex 的提示调整管道顺序后回到 Studio 3T 的 shell 里重新执行刷新结果验证。比如把$match移到$lookup之后db.getCollection(student).aggregate([ { $lookup: { from: class, localField: id, foreignField: stuid, as: student_class }}, { $match: { student_class.master: 老李 } } ])执行后如果返回了预期数据说明管道顺序修正成功。4.4 成功结果的样子修正后的 aggregate 应该返回非空数组且条数符合预期。比如$skip: 1, $limit: 2应该返回跳过第一条后的两条文档。如果$skip和$limit顺序写反返回的条数会不对——这是原文特别强调的点。验证模型对话是否正常可以到模型对话页面测试https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite五、本篇常见错排查这一节列出配置和使用过程中最容易踩的坑。5.1 Base URL 填成了官网地址最常见的错误在 Codex 的config.toml或 Claude Code 的settings.json里把 Base URL 填成了https://taotoken.net/?utm_source...这种官网地址。正确写法是https://taotoken.net/api不带任何 UTM 参数。5.2 Key 复制带了空格或换行从控制台复制 Key 时容易带上首尾空格或换行符。填进配置后请求会鉴权失败。建议复制后先粘贴到纯文本编辑器里检查一遍。5.3 环境变量没生效设置了TAOTOKEN_API_KEY或ANTHROPIC_API_KEY后如果当前终端会话没重新加载Codex 读不到。可以echo $TAOTOKEN_API_KEY确认一下或者重启终端。5.4 管道顺序问题$skip 写在 $limit 后面这是原文重点强调的$skip应该在$limit之前。如果写反了返回条数会不对。Codex 可以帮你检查这一点但最终验证还是要回 Studio 3T 执行。5.5 $match 放错位置导致空结果如果$match的过滤条件依赖$lookup关联后的字段比如student_class.master那$match必须放在$lookup之后。放在之前会因为字段不存在而匹配为空。5.6 $lookup 的 from 写错集合名MongoDB 集合名是复数形式还是单数容易搞混。from: class和from: classes是两个不同的集合。写错会直接返回空数组。5.7 $unwind 放在 $match 之前如果$unwind拆的是数组字段而$match过滤的是数组外的字段顺序影响不大。但如果$match过滤的条件和数组元素有关顺序就关键了。Codex 可以帮你判断。如果排查过程中需要确认 Key 状态或重新创建去 API Keys 页面https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite接入相关的详细说明在文档里https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite六、长期编码场景Coding Plan 与语义一致的收尾如果你不只是偶尔排查一条 aggregate 语句而是长期做 MongoDB 相关的开发工作每次都要配 Key、切通道会比较麻烦。TaoToken 的 Coding Plan 适合这种长期编码和 Agent 场景可以省去反复配置的步骤。了解 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite回到这篇的核心MongoDB 聚合$lookup查不到数据问题往往出在管道顺序上。$lookup → $unwind → $match → $skip → $limit这条链路任何一级顺序错了结果就是空数组或条数不对。Studio 3T 只给结果不给解释而走 TaoToken 通道的 Codex 可以帮你逐级对照排查。你要做的仍然是本地操作在 Studio 3T 的 shell 里执行语句把语句和结果复制出来交给 Codex 分析再回 Studio 3T 验证。数据库连接始终在你自己的工具里TaoToken 只负责给 Codex 供 Key 和通道。如果你还没开始先去注册账号并创建 Keyhttps://taotoken.net/?utm_sourcetaotoken_aicg_blog_end配通之后下次再遇到 aggregate 返回空数组就不用盯着 Studio 3T 的结果发呆了。