模糊查询/正则表达式
MongoDB使用正则表达式实现模糊查询。
常用情况:
- 对用户名和密码位数以及开头结尾的判断要求的时候
 - 判断邮箱地址是否合法
 - 是否含有特殊字符或禁止使用字符等等
 
正则表达式对象
例:查询姓名中带zz的同学
db.students.find(
    {
        stuname:/zz/i
    },
    {
        _id:0,
        stuname:1
    }
)上例中:
/zz/叫做正则表达式对象i代表不区分大小写
regex查询器
eg:查询所有名字含有'zz'的学生姓名
对于选项i(不区分大小写)有两种写法
法一:在$options中声明
db.students.find(
    {
        stuname:{
            $regex:'zz',
            $options:'i'
        }
    },
    {
        stuname:1,
        _id:0
    }
)法二:直接在$regex中声明
db.students.find(
    {
        stuname:{
            $regex:/zz/i
        }
    },
    {
        stuname:1
    }
)技术选型:
在
in操作符中,只能使用正则表达式对象,如:db.students.find( { stuname:{ $in:[ /zz/i,/x/ ] } } )在这种情况下,不能用
$regex。在使用隐式的
$and操作符中,只能使用$regex,不能使用正则表达式对象。如:db.students.find( { stuname:{ $regex:/z/i, $nin:['zz'] } } )此时有两个条件:①开头是jo;②不能是john。此时只能用
$regex。- 当
$options选择中包含x或s选择时,只能用$regex。 $not不能与$regor同时使用。
要想表示“不包含某正则式”,只能使用正则表达式对象:
eg:查找不包含“zz”的姓名。db.students.find( { stuname:{ $not:/zz/ } }, { stuname:1, _id:0 } )
数组查询
$all查询数组中含有某个/某些元素的文档
eg:查询books含有'html'和'hadoop'的同学的信息
db.students.find(
    {
        books:{
            $all:['html','MONGODB']
        }
    }
);查询第i个元素是某个值的文档
eg:查询第2本书是java的同学
db.students.find(
    {
        'books.1':'java'
    }
)注意:
- 下标从0开始,books.1表示第二本书
 - 左边必须用引号引起来。
 
$size:根据数组长度查询
eg:查询拥有4本书的同学的信息
db.students.find(
    {
        books:{
            $size:4
        }
    }
)注意:$size不能与比较操作($gt,$lt)等同时使用。
$slice切片取数组元素
eg:查询xm的第2到第4本书
db.students.find(
    {
        stuname:'xm'
    },
    {
        books:{
            $slice:[1,2]    //起始索引从1开始,取3个元素(3不是指到索引为3!)
        }
    }
)也可以只写一个数,表述最前面/后面的几个元素
$slice取正数:前几个元素$slice取负数:后几个元素
db.students.find(
    {
        stuname:'xm'
    },
    {
        books:{
            $slice:3        //最前面的3本书
        }
    }
)db.students.find(
    {
        stuname:'xm'
    },
    {
        books:{
            $slice:-3        //最后面的3本书
        }
    }
)		

Comments | NOTHING