MongoDB 高级集合数据查找
题纲:
- 确定与查找操作匹配的文档数;
- 以特定的顺序返回文档;
- 限制返回的文档数;
- 大型数据集分页;
- 减少返回的文档包含的字段;
- 查找数据集中特定字段的不同值;
计算文档数:
count()
可以实现,如下:
cursor = db.wordscoll.finc({first:{$in:['a','b','c']}});
itemCount = cursor.count();
练习
对结果进行排序:
Cursor对象的方法sort()让您能够指定要根据哪些字段对游标中的文档进行排序,并按相应的顺序返回文档。方法sort()将一个对象作为参数,这个对象字段名用作属性名, 并使用值1(升序)-1(降序)来指定排序顺序。如:
myCollection.find().sort({name:1}).sort({value:-1});
对同一个游标,可以多次使用sort(),从而依次按不周的字段进行排序。如上述代码的例子。
限制结果集:
- 只接受一定数量的文档;
- 限制返回的字段;
- 对结果分页,批量的获取它们;
只接受一定数量的文档 : 可以采用limit() 来指定返回文档的数量;
注: myCollection.find().limit(0);,表示不限制
限制返回的字段
实现此功能, 是需要启用find()操作作的的projection参数。参数是一个文档, 属性值为0/false表示不包含, 1/true 表示包含。如:
返回first字段为t的文档时, 要排除字段status、value和comments,可使用下面的projection参数:
find({first:"t"},{status:false,value:false,comments:false});
再如:只想返回word,size 二个字段:
find({first:"t"},{word:1,size:1})
结果集分页
采用limit()、skip()进行处理;
如:
cursor = mycol.find().sort({name:1});
cursor.limit(10);
cursor.skip(0);
cursor = mycol.find().sort({name:1});
cursor.limit(10);
cursor.skip(10);
cursor = mycol.find().sort({name:1});
cursor.limit(10);
cursor.skip(20);
以上skip(),方法相当于pagenumber 对应的是几页, 但这里不是指页码,而是对应页数的第n-1条记录。
查找不同的字段
Collection对象的方法distinct()方法能让指定字段的不同值列表,这种方法的语法如下:
distinct(key, [query]);
说明:
参数key 是一个字符串,指定了要获取哪个字段的不同值, 要获取子文档中字段的不同值,可使用句点语法,如status.count。
参数query 是一个包含标准查询选项目的对象,指定了要从哪些文档中获取不同的字段值。
例如:有一个包含字段first、last和age的用户文档,要获取年龄超过65岁的用户的不同姓名, 可使用如下操作,这里面需要排除重复的姓名, 显示所有不同的姓名, 所以这里采用了distinct这个关键字作为方法名
lastnames = myUsers.distinct('last',{age:{$gt:65}});
方法distinct()返回,指定条件下, 指定字段不重复的记录集合。
如
lastnames = myUsers.distinct('last',{age:{$gt:70}});