cursor的成员:
next():游标向后移动,并返回下一个结果,如果没有结果则报错
这个游标不会移动哦,只会判断游标的下一个是否可以移动
skip(n):去前面的n条数据,返回cursorlimit(n):取当前结果的n条数据,返回cursorsort(sortObj):按照指定的条件排序,返回cursor排序中,1是正序, -1是倒序
count():得到符合filter的结果数量,返回Numbersize():得到终极结果的数量,返回Number由于某些函数会连续返回cursor,因此可以对其进行链式编程,返回cursor的函数成为了链中的一环,无论它们的调用顺序如何,结果都是一样的:
实行的结果如下:
sort -> skip -> limit复制代码
查询条件
find函数的第一个参数是查询条件filter,它的写法极其丰富,下面列举了大部分情形下我们可能利用到的写法。
// 查询所有 name="twinkle" 的用户{ name: "twinkle" }// 查询所有 stuNo 以 1 结尾 并且 name 包含 tw 的用户{ stuNo: /1$/ , name: /tw/ }// 查询所有 stuNo 以 1 结尾 或者 name 包含 mar 的用户{ $or: [ { stuNo: /1$/, }, { name: /mar/ }, ],} // 查询所熟年龄即是18 或 20 的用户{ age: { $in: [18, 20] }} // 查询所熟年龄不即是18 或 20 或 25 的用户{ age: { $nin: [18, 20] }} // 查询所熟年龄在 20~30 之间的用户{ age: { $gt: 20, $lt: 30 }}复制代码
查询中涌现了一些分外的属性,它以$开头,表达了分外的查询含义,这些属性称之为操作符 operator
查询中的常用操作符包括:
$or:或者$and:并且$in:在...之中$nin:不在...之中$gt:大于$gte:大于即是$lt:小于$lte:小于即是$ne:不即是投影find中的第二个参数projection表示投影,类似于mysql中的select
它是一个工具,表达了哪些字段须要投影到查询结果中,哪些不须要
// 查询结果中仅包含 name、age,以及会自动包含的 _id{ name: 1, age: 1}// 查询结果不能包含 loginPwd、age,其他的都要包含{ stuNo: 0, age: 0}// 查询结果中仅包含 name、age,不能包含_id{ name: 1, age: 1, _id: 0}// 缺点:除了 _id 外,其他的字段不能稠浊编写{ name: 1, age: 0}// 这句话的意思是说,除了name字段要显示,其他的字段都不要显示,并且除了age字段不显示,其他字段都要显示,这句话是有抵牾的复制代码
<Model>.findById(id); // 按照id查询单条数据<Model>.findOne(filter, projection); // 根据条件和投影查询单条数据<Model>.find(filter, projection); // 根据条件和投影查询多条数据复制代码
findOne和find如果没有给予回调或等待,则不会真正的进行查询,而是返回一个DocumentQuery工具,可以通过DocumentQuery工具进行链式调用进一步获取结果,直到传入了回调、等待、调用exec时,才会真正实行。
链式调用中包括:
countlimitskipsort和mongo的利用办法一样
小彩蛋菜单mongodb的备份与规复# 规复mongorestore -d <dbname> <backupDir># 备份mongodump -d <dbname> -o <backupDir>复制代码