为了账号安全,请及时绑定邮箱和手机立即绑定
  • >db.location.find({w:{$geoWithin:{$box:[[0,0],[3,3]]}}}) #左边界,右边界,矩形查找 >db.location.find({w:{$geoWithin:{$center:[[0,0],5]}}}) # 圆心,半径,圆形查找 >db.location.find({w:{$geoWithin:{$polygon:[[0,0],[0,1],[2,5],[7,8]]}}}) #多边形
    查看全部
  • 2d和2dsphere可区别为是使用平面距离计算还是使用球面距离计算。 2d平面地理位置索引的创建方式为: >db.collection.ensureIndex({w:"2d"}) #w是字段名 在Mongodb中使用经纬度表示位置,格式[经度,纬度] 取值范围:经度[-180,180]纬度[-90,90] #插入数据 >db.location.insert({w:[1,1]}) >db.location.insert({w:[1,2]}) >db.location.insert({w:[5,6]}) >db.location.insert({w:[200,1]}) #Mongodb会直接报错,经度超出范围 >db.location.insert({w:[180,100]}) #纬度超出范围,Mongodb并没有报错,但是后期查询会出现不可预知的错误。 >db.location.insert({w:[79,76]}) 2d索引的查询方式有两种 (1)$near查询:查询距离某个点最近的点,默认返回100个最近的点 (2)$geoWithin查询:查询某个形状内的点。 a.$near查询 >db.location.find({w:{$near:[1,1]}}) #默认返回100个 可通过$maxDistance来限制查找的最远距离 >db.location.find({w:{$near:[1,1],$maxDistance:10}}) #限制查找最远距离为10 b.$geoWithin查询 形状有三种表示方式 1)$box:矩形,使用{$box:[[<x1>,<y1>],[<x2>,<y2>]]}表示,内部是两个坐标,第一个代表左边界,第二个代表右边界。 2)$center:圆形,使用{$center:[[<x1>,<y1>],r]}表示,内部是圆心位置和半径。 3)$polygon:多边形,使用{$polygon:[[<x1>,<y1>],[<x2>,<y2>],[<x3>,<y3>]]}表示,内部是坐标点,坐标点围成一个多边形。
    查看全部
  • 地理位置索引概念: 将一些点的位置存储在MongoDB中,创建索引后,可以按照位置来查找其他点。 地理位置索引分为两类: 1.2D索引,用于存储和查找平面上的点。 2.2Dsphere索引,用于存储和查找球面上的点。 例如: 查找距离某个点一定距离内的点。 查找包含在某区域内的点。
    查看全部
  • >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字段的索引
    查看全部
  • 自定义索引名称方式: >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查询中 3. 查询中如果包含了$text, 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"}) #给所有字段建立全文索引
    查看全部
  • 不适用全文索引:查找困难,效率低下,需要正则匹配,逐条扫描。 使用全文索引:简单查询即可查询需要的结果
    查看全部
  • 索引种类: 1、_id索引:大多数集合默认建立的索引, 2.单键索引:最普通的索引,一条记录,形式为:{x:1,y:2,z:3};单键索引不会自动创建 3.多键索引:多建索引与单键索引创建形式相同,区别在于字段的值; 4.复合索引:当我们的查询条件多个时,就需要建立复合索引 5.过期索引:是在一段时间后会过期的索引;在索引过期后,相应的数据会被删除;适合存储用户登录信息等 ①创建方法:db.collection.ensureIndex({time:1},{expireAfterSeconds:10})10为10秒 ②存储在过期索引字段的值必须是指定的时间类型; 必须是ISODate或者ISODate数组,不能使用时间戳,否则不能被自动删除 ③如果指定了ISODate数组,则按照快到期的时间进行删除 ④过期索引不能是复合索引 ⑤删除时间是不精确的 删除过程是由后台程序每60s跑一次,而且删除也需要一些时间,所以存在误差 如果设置时间很小,则会在60秒内才可以删除,而不是在规定时间内删除 6.全文索引 7.地理位置索引
    查看全部
  • 在一段时间后会过期的索引 在索引过期后,相应的数据会被删除 适合存储在一段时间之后会失效的数据,比如用户的登录信息、存储的日志等。 >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}) #使用复合索引查询
    查看全部
  • 我是这么理解索引的 默认添加索引不会在字段里显式 也就是和_id的不同之处 但是这个索引是后台奇效的 但在少量数据时很难看出效果(比如我用.sort({'':1})依然可以降序升序排序查看) 但是在大量数据时 可以测试查看建立索引和未建立的差别: 以添加一万条数据 通过删除刚建立的一万条来测试[隐式]索引(我自己瞎叫的)的作用 首先是未建立索引的 for(var i=0;i<10000;i++)db.imooc_collection.insert({b:i}) [建好后立即删除这一万条数据] for(var i=0;i<10000;i++)db.imooc_collection.remove({b:i}) [计算用时:37s(渣渣机器请无视)] 再来是添加数据后再建立索引的 for(var i=0;i<10000;i++)db.imooc_collection.insert({b:i}) [建好后立即建立索引] db.imooc_collection.ensureIndex({b:1}) [开始删除] for(var i=0;i<10000;i++)db.imooc_collection.remove({b:i}) [计算用时:8s(屌丝逆袭啦 OK)]
    查看全部
  • 单键索引: 1.单键索引是最普通的索引 2.与_id索引不同,单键索引不会自动创建 如:一条记录,形式为:{x:1,y:2,z:3} db.imooc_2.getIndexes()//查看索引 db.imooc_2.ensureIndex({x:1})//创建索引,索引可以重复创建,若创建已经存在的索引,则会直接返回成功。 db.imooc_2.find()//查看数据
    查看全部

举报

0/150
提交
取消
课程须知
1、对数据库的概念有比较清晰的认识。 2、了解一些简单的shell操作。
老师告诉你能学到什么?
1、了解mongoDB的特性 2、掌握mongoDB的基本操作 3、了解mongoDB在业务层的使用,并学会使用mongoDB来进行应用开发

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!