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

Mongoose查询collection时指定仅返回_id字段未生效

问题根因

调用connection.db.collection()拿到的是MongoDB Node.js原生驱动的集合实例,而非Mongoose Model封装的查询对象,其find方法语法和旧版Mongo Shell的find签名不兼容:

  • 旧版Mongo Shell的find方法签名为find(query, projection),第二个参数直接接收投影配置文档,直接传{ _id: 1 }可以正常生效
  • Node.js MongoDB驱动v3及以上版本中,find方法的第二个参数是全局配置对象,投影规则需要挂载在配置对象的projection字段下。直接传入{ _id: 1 }会被驱动识别为无效配置直接忽略,因此会返回匹配文档的全部字段。
修复方案

以下两种写法均可实现仅返回_id字段的需求:

  • 方式1:在find的配置项中明确声明projection字段
await connection.db.collection("collectionName").find(
  { updatedAt: { $gt: lastUpdated } },
  { projection: { _id: 1 } }
).toArray();
  • 方式2:链式调用project方法传入投影规则,语义更清晰,不易和其他配置项混淆
await connection.db.collection("collectionName")
  .find({ updatedAt: { $gt: lastUpdated } })
  .project({ _id: 1 })
  .toArray();

注意:通过connection.db.collection()获取原生集合实例后,所有查询操作完全遵循Node.js MongoDB驱动的语法规则,不会触发Mongoose内置的Schema转换、字段过滤等封装逻辑,不可直接照搬Mongo Shell的简写写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:06:26