前言
MongoDB学习日记(五):CRUD - find 中讲到了 find 的简单使用,但是按照之前的内容的话,find 会查询出所有满足条件的包含所有 field(属性)的结果;那么现在就讲讲怎么获取指定属性,以及分页。这包含两部分内容:
- 投影
- skip & limit
投影
db.user.find(
{ name : "admin" } ,
{ name : 1 , age : 1 , _id : 0 }
)
示例图中也可以看到,MongoDB 的 find( ) 方法支持第二个可选的参数,用来设置检索列表,当你设置 name : 1
时就代表着,name 会被查询显示出来,当你设置 _id : 0
时,_id 就被舍弃了。另外你也注意到了,当我的参数如下时,MongoDB 报错了,也就是说:只有 _id 属性可以设置为 0,其他属性你如果不需要,就不要设置了,MongoDB 会自动舍弃,不过如果只设置了 _id = 0, MongoDB 还是会把除开 _id 外的数据都给你。
/* 错误示例 */
db.user.find(
{ name : "admin" } ,
{ name : 1 , age : 0 , _id : 0 }
)
当然,你也可以结合 find( ) 中讲到的 Embedded Documents 和 Arrays 一起使用,而且 MongoDB 还为 Arrays 提供了一个方法 $slice,还有就是通过 Arrays 的下标是得不到值得,会返回一个空的数组给你
db.user.find(
{ name : "admin" },
{ "address.city" : 1, _id: 0 }
)
db.user.find(
{ name : "admin" },
{ group : { $slice : 1 }, _id: 0 }
)
$slice 的作用就是限制你返回的数组的大小,另外如果想例子的代码那样,他也会返回全部的属性。
这里其实还有一些疑点,我不知道为什么:MongoDB 还提供了一个方法 $,用法是 :"group.$" : 1
但是我这里一直报错… 如果你明白的话,可以告诉我下。
skip & limit
db.user.find().skip(1).limit(2)
- skip 的作用就是跳过几条数据
- limit 的作用就是获取几条数据
看图就能明白不用多解释,另外补充一个方法:sort( ) - 排序
db.user.find().sort( { name : 1 } ).skip(1).limit(2)
- sort( ) : 1 / -1 作用就是排序,当值为 1 时升序,当值为 -1 时降序
需要注意的是不论 sort( ) 在前还是在后,MongoDB 都会先排序。