-
db.createCollection('imooc_collection')
先创建集合
查看全部 -
MongoDB的概念
无数据结构限制(
1.没有表结构的概念,每条记录可以有完全不同的解构
2.便于开发
3.sql数据库需要事先定义表结构再使用
)
完全的索引支持(
1.Redis的key-value键值索引
2.HBASE的单索引,二级索引需要自己实现
)
单键索引,多建索引,数组索引,全文索引都可以很好的实现
方便的冗余与扩展(
1.复制集保证数据安全(一层层的主从解构,良好的数据安全性,每一份数据都分为三分,以免发生数据丢失)
2.分片扩展数据规模(方便的规模扩展)
)
良好的支持(
1.完善的文档
2.齐全的驱动支持
)
查看全部 -
(1)_id索引
查看全部 -
学习mongodb的重要网站
查看全部 -
一、索引属性
1、创建索引时的格式:db.collection.ensureIndex({param},{param}),第2个参数便是对应的属性。
2、比较重要的属性:
(1)名字,name指定:
db.collection.ensureIndex({},{name;” “})
(2)唯一性,unique指定,利用unique可以实现若存在,则不插入,若不存在则插入。
db.collection.ensureIndex({},{unique:true/false})
(aSuncat:ensureIndex - 创建一个索引, insert - 插入一条数据)
(3)稀疏性,sparse指定,不必为不存在的字段创建索引
db.collection.ensureIndex({},{sparse:true/false})
①db.imooc_2.find({m:{$exists:true}})
②db.imooc_2.ensureIndex({m:1},{sparse:true})
③db.imooc_2.find(m:{$exists:false})
如果mongoDB在选取索引时,如果发现在稀疏索引上查找不存在文档,将不会使用稀疏索引,如果强制指定的话,就会发现问题。
④db.imooc_2.getIndexs()
⑤db.imooc_2.find({m:{$exists:false}}).hint(“m_1”)
不能在稀疏索引上查找字段不存在的记录。
(4)是否定时删除,expireAfterSeconds指定:TTL,过期索引。
查看全部 -
一、索引类型
1、_id索引
(1)_id索引是绝大多数集合默认建立的索引。
(2)对于每个插入的数据,mongoDB都会自动生成一条唯一的_id字段。
2、单键索引
(1)单键索引是最普通的索引。
(2)与_id索引不同,单键索引不会自动创建。
3、多键索引
(1)多键索引与单键索引创建形式相同,区别在于字段的值。
①单键索引:值为一个单一的值,如字符串,数字或日期。
②多键索引:值具有多个记录,如数组。
(2)use imooc:使用imooc数据库
db.imooc_2.getIndexs():使用imooc_2数据集合
(3)db.imooc_2.insert({x:[1,2,3,4]}),创建了一个多键索引
4、符合索引
(1)当我们的查询条件不只有一个时,就需要建立符合索引
(2)db.imooc_2.ensureIndex({x:1,y:2}),创建索引
db.imooc_2.find({x:1,y:2}),使用索引
5、过期索引
(1)过期索引:是在一段时间后会过期的索引
(2)在索引过期后,相应的数据会被删除。
(3)适合存储一些在一段时间后会失效的数据,如用户的登陆信息,存储的日志。
(4)建立方法:db.collection.ensureIndex({time:1},{expireAfterSeconds:10}), expireAfterSeconds为过期时间
(5)过期索引的限制:
①存储在过期索引字段的值必须是指定的时间类型。说明:必须是ISODate或者ISODate数组,不能使用时间戳,否则不能被自动删除。
②如果指定了ISODate数组,则按照最小的时间进行删除。
③过期索引不能是复合索引。
④删除时间不是精确。说明:删除过程是由后台程序每60s跑一次,而且删除也需要一些时间,所以存在误差。
6、全文索引
(1)全文索引:对字符串与字符串数组创建全文可搜索的索引
(2)适用情况:{author:””,title:””,article:””}
(3)建立方法:
①db.articles.ensureIndex({key:”text”})
②db.articles.ensureIndex({key_1:”text”,key_2:”text”})
③db.articles.ensureIndex({“$**”:”text”}),对集合中所有字段创建一个大的索引。
(4)使用全文索引查询
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\””}}),查找既包含aa,又包含bb,又包含cc
(5)mongoDB中每个集合只允许创建一个全文索引
(6)全文索引相似度
①$meta操作符:{score:{$meta:”textScore”}}
②写在查询条件后面可以返回返回结果的相似度。
③与sort一起使用,可以达到很好的实用效果。
④db.imooc_2.find({$text:{$search:”aa bb”}},{score:{$meta:”textsScore”}}).sort({score:{$meta:”textScore”}}),根据score排序。
(7)全文索引使用限制:
①每次查询,只能指定一个$text查询。
②$text查询不能出现在$nor查询中。
③查询中如果包含了$text,hint不再起作用。
④mongoDB全文索引还不支持中文。(aSuncat:2016年的v3.2.6是已经支持中文了的)
7、地理位置索引
查看全部 -
一、很多情况下,系统性能下降,都是与mongoDB的索引相关的。
查看全部 -
索引种类的
查看全部 -
更新不存在数据update({y:100},{y:999},true)
查看全部 -
部分更新$set
查看全部 -
mongo更新多条数据
查看全部 -
一、查询
1、数据量较小时,不使用索引查询是较快的,但是如果数据量较大,查询就会非常缓慢。
2、db.imooc_collection.getIndexes()
3、db.imooc_collection.ensureIndex({x:1}), (1)ensureIndex创建索引,参数是json文档,
(2)key的值不再代表值,而是代表方向。
x:1代表正向排序,x:-1代表逆向排序。
(3)创建索引要消耗很长的时间,如果系统负载较重,且有很多已经存在的文档,则不能直接使用ensureIndex这个命令,需要在数据库创建之前就创建索引。
(4)创建索引会对写入有一定的影响。
查看全部 -
一、删除
1、为防止误操作,删除操作不允许不传参数。
2、db.imooc_collection.remove({c:2});
查看全部 -
一、更新多条数据
1、db.imooc_collection.insert({c:1})
2、db.imooc_collection.insert({c:1})
3、db.imooc_collection.insert({c:1}) 这样c:1的数据就有3条
4、db.imooc_collection.update({c:1},{c:2}), 这样只能把一条c:1的数据更新成c:2,因为mongoDB为了防止误操作,所以只更新了一条数据。
5、db.imooc_collection.update({c:1},{$set:{c:2}},false,true),这样能把3条c:1的数据全都更新成c:2
(1)第3个参数false:表示如果数据不存在,则不需要重新创建。
(2)第4个参数true:表示批量更新,如果是false,则表示只更新一条。
查看全部 -
一、更新不存在的数据
1、db.imooc_collection.update({y:100},{y:999},true)
true表示,如果查找的数据不存在,就自动插入一条。
查看全部
举报