MongoDB杂项
Truncate Table sbank show status like 'qcache%'; show variables like '%query_cache%'; set @@global.query_cache_size=1024*1024*64; mongodb.find 常用的条件设置语句: 1.简单查询: db.user.find({name:'11111',age;20}); 2.or选择器用法 db.user.find({$or:[{'name':'lv'},{'name':'chen'}]}) 3.$gt(>) 大于 4.$gte(>=) 大于等于 5.$lt(<) 小于 6.$lte(<=) 小于等于 7.$ne(!=) 不等于 db.user.find({'name':{$ne:'lv'}}); db.user.find({'age':{$gt:20,$lt:30}}) 嵌入文档的精准查询: db.user.find({favoriters:{artist:"picasso",food:"pizza"}}) 匹配一个嵌入文档中的字段: db.user.find({'favoriters.artist':"picasso"}) 1.在一个数组上匹配: 先提供一个文档以供测试: [html] view plain copy { "name":"lv", "age":20, "type":1, "status":"p", "favorites":{"artist" : "picasso","food":"pizza"}, "badges":["blue","black"], "finidhed":[17,3], "points":[{"points":85,"bonus":20},{"points":85,"bonus":10}] } 1.文档中数组匹配 db.user.find({"badges":"blue"}) 2.查询数组中某个特定数据中的值 db.user.find({"badges.0":"blue"}) 3.数组的范围匹配查询 db.user.find({"finished":{$elemMatch:{$gt:15,$lt:20}}}) //查询finished中是否有元素a满足a>15 && a<20 db.user.find({"finished":{$gt:15,$lt:20}}) //查询finished中是否有元素a满足a>15,元素b满足b<20 4.嵌入数组的文档查询 db.user.find({"points.0.points":{$gte:55}}) //匹配points数组中下标为0的元素中的points>=55的所有数据 db.user.find({"points.points":{$gte:55}}) //匹配points数组中任何一个元素满足points>=55的所有数据 5.嵌入数组的文档的多条件查询 db.user.find({"points":{$elemMatch:{"points":{$gte:53},"bonus":20}}}) //匹配points数组中是否有元素a.points>=53同时a.bonus=20的元素 db.user.find({"points.points":{$gte:53},"bonus":20}) //匹配points数组中是否有元素a.points>=53和有元素b.bonus=20的元素(a,b元素可以是同一个元素也可以非同一个元素) 模糊查询简介 MongoDB查询条件可以使用正则表达式,从而实现模糊查询的功能。模糊查询可以使用$regex操作符或直接使用正则表达式对象。 MySQL MongoDB select * from student where name like ’%joe%’ db.student.find({name:{$regex:/joe/}}) select * from student where name regexp ’joe’ db.student.find({name:/joe/}) $regex操作符的介绍 MongoDB使用$regex操作符来设置匹配字符串的正则表达式,使用PCRE(Pert Compatible Regular Expression)作为正则表达式语言。 regex操作符 {<field>:{$regex:/pattern/,$options:’<options>’}} {<field>:{$regex:’pattern’,$options:’<options>’}} {<field>:{$regex:/pattern/<options>}} 正则表达式对象 {<field>: /pattern/<options>} $regex与正则表达式对象的区别: 在$in操作符中只能使用正则表达式对象,例如:{name:{$in:[/^joe/i,/^jack/}} 在使用隐式的$and操作符中,只能使用$regex,例如:{name:{$regex:/^jo/i, $nin:['john']}} 当option选项中包含X或S选项时,只能使用$regex,例如:{name:{$regex:/m.*line/,$options:"si"}} $regex操作符的使用 $regex操作符中的option选项可以改变正则匹配的默认行为,它包括i, m, x以及S四个选项,其含义如下 i 忽略大小写,{<field>{$regex/pattern/i}},设置i选项后,模式中的字母会进行大小写不敏感匹配。 m 多行匹配模式,{<field>{$regex/pattern/,$options:'m'},m选项会更改^和$元字符的默认行为,分别使用与行的开头和结尾匹配,而不是与输入字符串的开头和结尾匹配。 x 忽略非转义的空白字符,{<field>:{$regex:/pattern/,$options:'m'},设置x选项后,正则表达式中的非转义的空白字符将被忽略,同时井号(#)被解释为注释的开头注,只能显式位于option选项中。 s 单行匹配模式{<field>:{$regex:/pattern/,$options:'s'},设置s选项后,会改变模式中的点号(.)元字符的默认行为,它会匹配所有字符,包括换行符(\n),只能显式位于option选项中。 使用$regex操作符时,需要注意下面几个问题: i,m,x,s可以组合使用,例如:{name:{$regex:/j*k/,$options:"si"}} 在设置索弓}的字段上进行正则匹配可以提高查询速度,而且当正则表达式使用的是前缀表达式时,查询速度会进一步提高,例如:{name:{$regex: /^joe/} $inc 根据要添加的值递增该字段的值。 $mul 将该字段的值乘以指定的值 $rename 重命名字段 $setOnInsert 操作时,操作给相应的字段赋值 $set 用来指定一个键的值,如果不存在则创建它 $unset 用来指定一个键的值,如果不存在不创建创建它 $min 只有当指定的值小于现有字段值时才更新该字段。 $max 只有当指定的值大于现有字段值时才更新该字段。 $currentDate 设置当前日期字段的值,或者作为一个日期或时间戳。 begin tran tran_Info select * from test WITH(TABLOCKX); ................................. commit tran tran_Info alter database tablename set emergency alter database tablename set single_user dbcc checkdb(tablename,REPAIR_ALLOW_DATA_LOSS) dbcc checkdb(tablename,REPAIR_REBUILD) alter database tablename set multi_user