-
>db.collection.ensureIndex({},{sparse:true/false}) #指定索引是否稀疏 MongoDB索引默认是不稀疏的。 稀疏性的不同代表了MongoDB在处理索引中存在但是文档中不存在的字段的两种不同的方法。 例如,我们为一个collection的x字段指定了索引,但这个collection中可以插入如{y:1,z:1}这种不存在x字段的数据,如果索引为不稀疏的,mongodb依然会为这个数据创建索引,如果在创建索引时指定为稀疏索引,那么就可以避免这件事情发生了。 >db.imooc_2.insert({"m":1}) >db.imooc_2.insert({"n":1}) 通过$exists可以判断字段是否存在,如 >db.imooc_2.find({m:{$exists:true}}) #筛选出有m字段的文档 给这个文档的m字段创建一个稀疏索引: >db.imooc_2.ensureIndex({m:1},{sparse:true}) 第二条文档不存在m字段,所以不会创建这个索引 如果使用稀疏索引查找不存在稀疏索引字段的文档,mongodb则不会使用这个索引查找 例如: >db.imooc_2.find({m:{$exists:false}}) #可以查到数据 但如果我们通过hint强制使用索引,就不会查到数据了 >db.imooc_2.find({m:{$exists:false}}).hint("m_1") #查不出数据,因为n上并没有m字段的索引查看全部
-
show dbs use imoc db.dropDatabsse() use imoc查看全部
-
自定义索引名称方式: >db.imooc_2.ensureIndex({x:1,y:1,z:1,m:1},{name:"normal_index"}) 删除索引时,可以通过我们定义的名字来删除索引 >db.imooc_2.dropIndex("normal_index")查看全部
-
1)每次查询只能指定一个$text查询 2)$text查询不能出现在$nor查询中($nor是排除查询) 3)查询中如果包含了$text,hint不再起作用(hint可以强制指定其他索引) 4)MongoDB全文索引还不支持中文查看全部
-
搜索排序,查询结果与你查询条件越相关的越排在前面。 MongoDB中可以使用$meta操作符完成,格式: {score:{$meta: "textScore"}} 在全文搜索的格式中加入这样一个条件,如下: >db.imooc_2.find({$text:{$search:"aa bb"}},{score:{$meta:"textScore"}}) 搜索出的结果会多出一个score字段,这个得分越高,相关度越高。 还可以对查询出的结果根据得分进行排序: >db.imooc_2.find({$text:{$search:"aa bb"}},{score:{$meta:"textScore"}}).sort({score:{$meta:"textScore"}}) 加上.sort方法即可。查看全部
-
查询方式,全文索引不再需要指定字段名,直接用$text,$search即可,且mongodb中,每个集合只允许创建一个全文索引。 >db.articles.find({$text:{$search:”coffee”}}) >db.articles.find({$text:{$search:”aa bb cc”}}) #空格代表或操作,aa或bb或cc,满足一个即可 >db.articles.find({$text:{$search:”aa bb -cc”}}) #-号为非操作,即不包含cc的 >db.articles.find({$text:{$search:”\”aa\”bb cc”}}) #加双引号可以提供且关系操作 $search中即为要查找的字符串 案例 1).在article字段上建立全文索引 >db.imooc_2.ensureIndex({"article":"text"}) 2).新建模拟数据 >db.imooc_2.insert({"article":"aa bb cc dd ee"}) >db.imooc_2.insert({"article":"aa bb yy uu ll ii oo"}) >db.imooc_2.insert({"article":"aa bb cc dd jsdkfjskdf"}) >db.imooc_2.insert({"article":"aa bb cc dd 7878sdfj"}) 3).全文索引查询 >db.imooc_2.find({$text:{$search:"aa"}}) #查找包含aa的 >db.imooc_2.find({$text:{$search:"aa bb cc"}}) #查找包含aa或包含bb或包含cc的,空格代表或关系 >db.imooc_2.find({$text:{$search:"aa bb -cc"}}) #包含aa bb 但不包含cc的 >db.imooc_2.find({$text:{$search:"\"aa\" \"bb\" \"cc\""}}) #用双引号引住搜索字段,可表示且关系,查询包含aa且包含bb且包含cc的查看全部
-
创建方式 >db.articles.ensureIndex({key:"text"}) #key-字段名,value-固定字符串text 上述指令表示,在articles这个集合的key字段上创建了一个全文索引 >db.articles.ensureIndex({key1:"text",key2:"text"}) #在多个字段上创建全文索引 对于nosql数据库,每个记录存储的key可能都是不同的,如果要在所有的key上建立全文索引,一个一个写很麻烦,mongodb可以通过下面指令完成: >db.articles.ensureIndex({"$**":"text"}) #给所有字段建立全文索引查看全部
-
>db.imooc_2.ensureIndex({time:1},{expireAfterSeconds:30}) #time索引30秒后失效 >db.imooc_2.insert({time:new Date()}) #new Date()自动获取当前时间,ISODate >db.imooc_2.find() #可看到刚才insert的值 过30秒后再find,刚才的数据就已经不存在了。 过期索引的限制: 1.存储在过期索引字段的值必须是指定的时间类型,必须是ISODate或者ISODate数组,不能使用时间戳,否则不能自动删除。 例如 >db.imooc_2.insert({time:1}),这种是不能被自动删除的 2.如果指定了ISODate数组,则按照最小的时间进行删除。 3.过期索引不能是复合索引。因为不能指定两个过期时间。 4.删除时间是不精确的。删除过程是由MongoDB的后台进程每60s跑一次的,而且删除也需要一定时间,所以存在误差。查看全部
-
在一段时间后会过期的索引 在索引过期后,相应的数据会被删除 适合存储在一段时间之后会失效的数据,比如用户的登录信息、存储的日志等。 >db.imooc_2.ensureIndex({time:1},{expireAfterSeconds:10}) #创建过期索引,time-字段,expireAfterSeconds在多少秒后过期,单位:秒查看全部
-
当查询条件不只有一个时,需要建立复合索引 例如{x:1,y:2,z:3}这样一条数据,要按照x与y的值进行查询,就需要创建复合索引。 >db.imooc_2.ensureIndex({x:1,y:1}) #1升序,-1降序 >db.imooc_2.find({x:1,y:2}) #使用复合索引查询查看全部
-
多键索引与单键索引创建形式相同,区别在于字段的值。 多键索引的值具有多个记录,例如数组。 >db.imooc_2.insert({x:[1,2,3,4,5]}) #创建了多键索引查看全部
-
_id索引:绝大多数集合默认建立的索引,对于每个插入的数据,MongoDB都会生成一条唯一的_id字段。 例如新创建一个集合时 >db.imooc_2.insert({x:1}) >db.imooc_2.getIndexes() #查看集合索引,可看到_id索引查看全部
-
数据量很大时,查询使用索引可大幅度提高效率 1.db.imooc_collection.getIndexes() #查看集合的索引情况,初始情况下有_id一个索引 2.db.imooc_collection.ensureIndex({x:1}) #创建x字段索引,+1为升序,-1为降序,这里的1不再代表值 3.如果数据量非常大,创建索引需要消耗一定的时间,这时需要在使用数据库之前就将索引创建完毕,否则会对数据库性能造成较大影响查看全部
-
数据删除 remove 必须传参数,不传会报错,他默认删除所有查找到的数据 >db.imooc_collection.remove({c:2}) 对于某张表使用删除操作可以使用 >db.imooc_collection.drop() #db.表名.drop() 再>show tables 已经看不到数据查看全部
-
mongodb中update默认会更新第一条找到的数据 如果有三条c为1的数据 >db.imooc_collection.insert({c:1}) 使用update更新 >db.imooc_collection.update({c:1},{c:2}) 再查找c为1的数据,仍存在两条,查c为2的数据,有一条 mongodb这样涉及是为了防止update误操作 可以通过下面方式进行多文档更新 >db.imooc_collection.update({c:1},{$set:{c:2}},false,true)查看全部
举报
0/150
提交
取消