MongoDB进阶系列(9)——查询功能(五) 遍历游标

之前已经已经介绍了skip和limit方法,我们可以依靠它们跳转到需要的文档位置和文档范围。

本文将给出如果使用游标来进行遍历的方法:

> var cur=db.teachers.find()
> cur.hasNext()
true
> cur.next()
{
	"_id" : ObjectId("5500f4031c8361936a1e6a08"),
	"name" : "Mr A",
	"age" : 40,
	"graduates" : [
		{
			"name" : "Zhang",
			"age" : 22
		},
		{
			"name" : "Yao",
			"age" : 23,
			"phone" : [
				"13100001111"
			]
		},
		{
			"name" : "Chen",
			"age" : 24,
			"gender" : "male"
		}
	]
}


> cur.hasNext()
true
> x=cur.next()
{
	"_id" : ObjectId("5500f45a1c8361936a1e6a09"),
	"name" : "Mr B",
	"age" : 45,
	"graduates" : [
		{
			"name" : "Hou",
			"age" : 30
		},
		{
			"name" : "Liu",
			"age" : 23,
			"phone" : [
				"13200001111"
			]
		},
		{
			"name" : "Ding",
			"age" : 25,
			"gender" : "female"
		}
	]
}
> x.level="Professor"
Professor
> x
{
	"_id" : ObjectId("5500f45a1c8361936a1e6a09"),
	"name" : "Mr B",
	"age" : 45,
	"graduates" : [
		{
			"name" : "Hou",
			"age" : 30
		},
		{
			"name" : "Liu",
			"age" : 23,
			"phone" : [
				"13200001111"
			]
		},
		{
			"name" : "Ding",
			"age" : 25,
			"gender" : "female"
		}
	],
	"level" : "Professor"
}
> db.teachers.find({_id:ObjectId("5500f45a1c8361936a1e6a09") })
{ "_id" : ObjectId("5500f45a1c8361936a1e6a09"), "name" : "Mr B", "age" : 45, "graduates" : [ { "name" : "Hou", "age" : 30 }, { "name" : "Liu", "age" : 23, "phone" : [ "13200001111" ] }, { "name" : "Ding", "age" : 25, "gender" : "female" } ] }
> 



> x.graduates.length
3

过程见以上代码。值的注意的是,x保存了cur遍历到的Json对象,但是对其修改是不会影响到原集合的。如果需要保存修改,可以用save方法,db.teachers.save(x)。

第二个需要注意的是,keyvalue是Json数组的key,获取数组长度的方法,x.graduates.length。以后可以用JS代码for循环来便利这样的json数组。

第三个需要注意的是,当cur.hasNext()为false时表示遍历结束。如果这时候继续cur.next(),会报异常,并不是返回空。

你可能感兴趣的:(mongodb)