find简介
MonngoDB中使用find来进行查询。查询就是返回集合文档中的子集,子集的范围从0个到文档到整个集合。find的第一个参数决定了要返回哪些文档,这个参数是一个文档,用于指定的查询条件。
空的查询文档(例如{})会匹配集合 的全部内容。要不是指定查询文档,默认就是{}。 db.c.find() 等价与 db.c.find({})
查询条件
"$lt" "$lte" "$gt" "$gte"这些比较操作符分别对应着< <= > >=,可以将其组合起来以便查找一个范围的值。如: 查询‘age’字段大于等于18,小于等于30的所有文档。
db.users.find({"age" : {"$gte" : 18, "$lte" : 30}})
还有一个不等于“$ne”。
“$in”可以用来查询一个键的多个值;“$or”更通用一些,可以在多个键中查询任意的给定值。
"$not"是元条件句,即可以用在任何其他条件之上。与正则表达式联合使用时极为有用,用来查询那些与特定模式不匹配的文档。 "$mod"会将查询的值除以第一个给定值,若余数等于第二个给定值则匹配成功。
特定类型的查询
null这个类型有点奇怪,它确实能匹配自身;但是null不仅会匹配到某个键的值为null的文档,而且还会匹配不包含这个键的文档。,所以这种匹配还会返回缺少这个键的所有文档。
如果想要匹配键值为null的文档,既要检查该键的值是否为null,还要通过“$exists”判定键值已存在。
db.c.find({"z" : {"$in" : [null], "$exists" : true}})
查询数组
查询数组元素与查询标量值是一样的。
$all:如果需要多个元素来匹配数组,就要用“$all”了,这样会匹配一组元素。
$size:它可以用于查询特定长度的数组。
$slice:这个操作符可以返回某个键匹配的数组元素的一个子集。
$:$操作符可以得到一个匹配的元素。
查询内嵌文档
查询内嵌文档与普通文档查询完全相同。
$where查询
键/值是一种表达能力非常好的查询方式,但是依然有些需求它无法表达。 不是非常必要时,一定要避免使用“$where”查询,因为他们在速度上要比常规查询慢的很多。每个文档都要从BSON转换成JS对象,然后通过“$where”表达式来运行。而且"$where"语句不能使用索引。
游标
客户端对游标的实现通常能够对最终的结果进行有效的控制。可以限制结果的数量,略过部分结果,根据任意键按任意顺序的组合对结果进行排序,或者是执行其他一些强大的操作。
limit skip和sort分别对查询结果限制,忽略和排序。
比较顺序:
最小值;
null ;
数字(整型、长整型、双精度);
字符串;
对象 / 文档;
数组;
二进制数据;
对象 ID ;
布尔型;
日期型;
时间戳;
正则表达式;
最大值 。