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

如何在Mongo Shell脚本中获取指定键值及遍历游标?

问题分析与解决:Mongo Shell中游标访问与遍历问题

你在Mongo Shell中执行了以下代码:

const records = db.issues.find().limit(1);

print('Record:', records);
print('ID:', records.id);

执行后输出:

Record: [
  {
    _id: ObjectId("63f94e684902f564f7d418ca"),
    id: 1,
    status: 'New',
    owner: 'Ravan',
    effort: 5,
    created: ISODate("2019-01-15T00:00:00.000Z"),
    due: null,
    title: 'Error in console when clicking Add',
    description: 'Steps to recreate the problem:\n'
  }
]
ID:

为什么records.id取不到值?

核心原因是**db.issues.find().limit(1)返回的是游标对象,不是直接的文档数据**。

Mongo Shell在执行print('Record:', records)时,会自动迭代游标并输出文档数组,但变量records本身仍然是游标类型——游标对象没有id属性,所以records.id自然无法获取到文档里的id值,只会输出ID:。

要正确获取单条文档的id,需要手动从游标中取出文档:

方法1:用next()获取单条文档

const records = db.issues.find().limit(1);
const doc = records.next(); // 取出游标中的唯一文档
print('Record:', doc);
print('ID:', doc.id); // 此时会输出ID: 1

方法2:用toArray()转成数组后访问

const records = db.issues.find().limit(1).toArray();
print('Record:', records);
print('ID:', records[0].id); // 通过数组索引访问第一个文档的id

如何遍历多条记录的游标?

当查询返回多条记录时,常用的遍历方式有三种:

1. 使用游标forEach()方法(推荐)

直接对游标调用forEach,传入处理每个文档的函数:

db.issues.find().forEach(function(doc) {
    print(`文档ID: ${doc.id},标题: ${doc.title}`);
});

2. 使用while循环配合hasNext()和next()

手动判断游标是否还有下一个文档,逐个取出处理:

const cursor = db.issues.find();
while (cursor.hasNext()) {
    const doc = cursor.next();
    print(`文档ID: ${doc.id},状态: ${doc.status}`);
}

3. 转成数组后遍历(适合小数据量)

先把游标转为数组,再用普通数组遍历方式处理:

const docs = db.issues.find().toArray();
for (let i = 0; i < docs.length; i++) {
    print(`第${i+1}条文档标题: ${docs[i].title}`);
}

内容的提问来源于stack exchange,提问作者chris-j

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 03:52:45