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

如何在MongoDB中将集合中所有_id提取为数组?

嘿,要把集合里所有文档的_id提取成一个数组其实挺简单的,我给你分两种常用场景来讲解:

使用Mongo Shell提取_id数组

假设你的集合名叫yourCollection,在Mongo Shell里有两种高效的实现方式:

方法1:查询投影后映射(适合小数据量)

先查询所有仅包含_id字段的文档,转成数组后用map提取每个文档的_id:

db.yourCollection.find({}, { _id: 1 }).toArray().map(doc => doc._id)
  • { _id: 1 }是投影参数,指定只返回_id字段
  • toArray()把查询游标转为文档数组
  • map()遍历数组,取出每个文档的_id

方法2:聚合管道(适合大数据量)

用聚合操作在数据库端直接生成_id数组,减少客户端传输的数据量,效率更高:

db.yourCollection.aggregate([
  { $project: { _id: 1 } }, // 只保留_id字段
  { $group: { _id: null, ids: { $push: "$_id" } } } // 把所有_id推到ids数组里
]).toArray()[0].ids
  • $group阶段用$push将所有_id收集到一个数组中
  • 最后取结果数组的第一个元素的ids属性,就是目标数组
使用MongoDB驱动程序(以Node.js为例)

如果是在代码中实现,以Node.js的官方MongoDB驱动为例,逻辑和Shell类似:

const { MongoClient } = require('mongodb');

async function getAllDocumentIds() {
  // 连接数据库
  const client = await MongoClient.connect('你的MongoDB连接URI');
  const db = client.db('你的数据库名');
  const collection = db.collection('yourCollection');

  // 方法1:查询后映射
  const docs = await collection.find({}, { projection: { _id: 1 } }).toArray();
  const ids = docs.map(doc => doc._id);

  // 方法2:聚合方式
  const aggResult = await collection.aggregate([
    { $project: { _id: 1 } },
    { $group: { _id: null, ids: { $push: "$_id" } } }
  ]).toArray();
  const idsFromAggregation = aggResult[0].ids;

  // 关闭连接
  await client.close();
  
  return ids; // 返回提取的_id数组
}

// 调用函数并打印结果
getAllDocumentIds().then(ids => console.log('提取的_id数组:', ids));

其他编程语言的MongoDB驱动实现逻辑基本一致,核心都是投影仅获取_id字段,再通过客户端映射或服务端聚合生成目标数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 02:27:37