MongoDB Shell中find查询结果无法直接访问JSON对象字段问题
原因说明
MongoDB Shell 中的find()方法返回的是游标(Cursor)对象,并非直接的查询结果文档对象,你直接访问游标对象的name属性当然不存在,因此没有输出。
你直接在 Shell 中执行find语句能看到返回的文档,是因为 Shell 默认会自动迭代游标,最多打印20条匹配的文档,这个自动迭代的过程不会把实际的文档赋值给你定义的变量,变量拿到的始终是游标本身。
解决方法
方案1:直接使用findOne()获取单条文档
如果只需要查询单条匹配的文档,直接用findOne()方法即可,它会直接返回单个文档对象:
let testRes = db.students.findOne({}, {name:1}) console.log(testRes.name) // 正常输出 Ofek
方案2:手动迭代find()返回的游标
如果你需要保留find() + limit(1)的写法,手动迭代游标取出实际文档即可,常见写法有两种:
- 调用
next()方法取游标第一个文档:
let testRes = db.students.find({}, {name:1}).limit(1) let doc = testRes.next() console.log(doc.name) // 正常输出 Ofek
- 调用
toArray()方法把游标转成文档数组后取第一个元素:
let testRes = db.students.find({}, {name:1}).limit(1).toArray() console.log(testRes[0].name) // 正常输出 Ofek
内容的提问来源于stack exchange,提问作者ProFek
相关产品推荐
相关产品推荐

