You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB使用$slice投影时如何仅返回指定数组字段

问题解决方法

你的问题核心是MongoDB find() 方法的投影规则导致的:当投影中使用$slice这类运算符时,MongoDB会默认返回文档的所有字段,而普通的字段包含(如{questions:1})只会返回指定字段。要在不排除动态字段的前提下,只返回切片后的questions字段,改用聚合管道即可:

解决方案代码

db.Tests.aggregate([
  // 匹配目标文档
  { $match: { "key": 1 } },
  // 仅投影并切片questions字段
  { $project: { questions: { $slice: ["$questions", 1, 1] } } }
])

如果不需要返回默认的_id字段,修改$project阶段即可:

{ $project: { _id: 0, questions: { $slice: ["$questions", 1, 1] } } }

原理说明

聚合管道的$project阶段是白名单机制:只返回你显式指定的字段,不会自动包含其他未声明的字段,完美适配你的动态schema场景。而find()的投影在使用数组运算符时,采用的是黑名单机制——必须显式排除不需要的字段,否则会全部返回,这就是你遇到差异的原因。

内容的提问来源于stack exchange,提问作者Chique

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 12:14:56