七、查询条件

来源:互联网 发布:纯js实现分页 编辑:程序博客网 时间:2024/05/21 10:03
1、小于$lt,小于等于$lte,大于$gt,大于等于$gte

加入时间的比较

搜索不等于
$ne

2、$in支持查询一个键的多个值,并支持查询不同类型的

不同数据类型的

3、$nin跟$in是对应的

4、$or支持多条件查询,这是或者。$and是并且

$or和$in一起使用

5、$mod,取模,会将查询的值除以第一个给定值,如果余数等于第二个给定值的就成功

$not 就是取反

总结:
条件语句和修改器位于不同的位置,条件语句是内层文档的键,修改器是外层文档的键
6、null
可以查找某个字段为null的文档,还可以匹配不包含这个键的文档

7、$exists判断键是否存在
匹配键值为null的文档,既要检查该键值是否为null,又要检查该键已存在

8、正则表达式

9、数组查询
~可以通过数组中的一个字段查询

~$all通过多个元素匹配数组,而且顺序是无关紧要的,就是说,如果我查的是1,2,我数组中是2,1也是可以查询出来的

~精确匹配

~下标匹配

~长度匹配

扩展:在$push一个数组的时候,其实相应的也会对他的数组长度size进$inc的操作
~$slice操作符
$slice:正数 返回前多少天数据

$slice:负数 返回后多少条数据

$slice:[从多少+1条开始,偏移量],比如下面的例子,从第二条开始,显示2~3个

~$elemMatch

因为这样不能精确定位到y:15
注:这个为什么是两个结果呢?因为15肯定不用说了,5的确是小于20,25的确是大于10
所以需要使用elemMatch,这个$elemMatch表示必须同时满足这两个条件的元素

但是貌似用这个啥都查不出来了,哦哦~~因为$elemMatch不能匹配非数组的字段,因为y是个数组
怎样获取y:15呢?
哈哈以后再说
10、查询内嵌文档

这种查询方法是不推荐的,因为一旦内嵌文档中添加字段,就会查询不到
推荐方法

多条件查询

11、$where这种查询比普通的查询要慢的多,一定要尽量避免使用
总结:在服务器端要保证使用JavaScript的安全性, 必要的情况下,可以使用--noscripting,完全关闭JavaScript的运行。
12、游标
~limit
limit为限制取值条数,limit(3)为取值3条

~skip和limit类似,skip(3)为跳过这三条,取值其他条

~sort排序,1为升序,-1为降序

~limit skip limit综合使用,可实现分页

但是用这种方法实现分页不太好,skip是不适用于略过大量的数据的,使用skip略过大量数据,会变得很慢。
var page1 = db.users.find().sort({"age":-1}).limit(2)
var latest = null;
while(page1.hasNaxt()){
latest = page1.next();
display(latest);//展示方法
}
var page2 = db.users.find({"age":{"$gt":latest.age}});
page2.sort({"age":-1}).limit(2);
~如果需要比较的值类型较多,比较顺序,优先级从小到大

~Math.random()

这个查询结果也有可能为空
如果需要查随机结果,用索引是很有效的,而且很快
13、高级查询选项,这段比较崩溃啊,没实现
~$maxscan:Integer
14、获取唯一的结果
在进行数据处理的时候,一般都是先取数据,然后处理完成之后保存,但是如果在保存的时候,由于文档体积增大而无法回到原来的位置,MongoDB一般会把他存储到最后,当游标查找到最后的时候,其实就是重复数据了
避免重复的方法快照
db.users.find().snapshot()
快照会降低查找速度,一般情况下不需要使用,用于备份时使用快照


珍爱生命,远离图片啊,累死我了!!!





原创粉丝点击