MongoDB-入门

  • -----------------------------------------------------前言-----------------------------------------------------
  • windows下安装:http://www.runoob.com/mongodb/mongodb-window-install.html
  • 系统资料:http://www.runoob.com/mongodb/mongodb-tutorial.html
  • -----------------------------------------------------基础-----------------------------------------------------
  • db                                            // 显示当前数据库对象或集合
  • show dbs                                //显示所有数据的列表
  • use 数据库                                //连接指定的数据库,不存在则自动创建
  • show collections                    // 查看当前数据库的所有集合名
  • db.dropDatabase()                //删除当前数据库
  • db.集合名.drop()                    //删除集合
  • -----------------------------------------------------增加-----------------------------------------------------
  • db.集合名.insert({x:10})        // 插入
  • db.集合名.insert({time:new Date()})        // 插入当前时间
  • for(i=3;i<100;i++)db.集合名.insert({x:i})           // 支持json语句
  • -----------------------------------------------------查找-----------------------------------------------------
  • db.集合名.find()     // 查找所有文档
  • db.集合名.find({x:10})     // 查找x字段为10的文档
  • db.集合名.find().pretty()        //格式化显示查询的所有文档
  • db.集合名.find().count()        // 显示该集合的总数
  • db.集合名.find().skip(3)            // 跳过前三条数据
  • db.集合名.find().limt(2)            //限制返回2条
  • db.集合名.find().sort({x:1})        // 使用x字段排序,1为正排序,-1为负排序
  • -----------------------------------------------------更新-----------------------------------------------------
  • db.集合名.update({x:1},{x:999})        // 更新x:1的文档的所有数据,改为x:999,其他数据会没
  • db.集合名.update({z:100},{}$set:{y:999}})         // 局部更新,只更新字段为z:100的y的数据,其他数据不变
  • db.集合名.update({x:100},{x:999},true)            // 更新数据,若不存在,则插入新数据
  • db.集合名.update({z:100},{}$set:{y:999}},false,true)        // 默认只更新第一条,这是批量更新所有符合查询条件的数据。
  • -----------------------------------------------------删除-----------------------------------------------------
  • db.集合名.remove()                //删除文档,必须传入参数
  • db.集合名.remove({x:1})            // 删除x:1的数据,默认删除所有符合查询条件的数据。
  • -----------------------------------------------------创建索引-----------------------------------------------------
  • db.集合名.getIndexes()                // 查看集合的索引情况
  • db.集合名.ensureIndex({x:1})             // 创建x为字段的索引,1为正向排序,-1为逆向排序
  • db.集合名.ensureIndex({x:'test'})        //   创建单个全文索引
  • db.集合名.ensureIndex({x:'test',y:'test'})        // 创建多个全文索引
  • db.集合名.ensureIndex({“$**”:'test'})           // 创建集合中所有字段创建索引
  • -----------------------------------------------------全文搜索-----------------------------------------------------
  • db.集合名.find({$text:{$search:"a"}})                // 全文查找包含a这个字符串的文档
  • db.集合名.find({$text:{$search:"a b -c"}})                // 全文查找包含a或者包含b或者不包含c的文档
  • db.集合名.find({$text:{$search:"\"a\"  \"b\"  \"-c\""}})                // 全文查找包含a并且包含b并且不包含c的文档
  • db.集合名.find({$text:{$search:"a b -c"}},{score:{$meta:"textScore"}}).sort({score:{$meta:"textScore"}})  // 全文查询相似度,配合sort起到很好的相似度排序效果。

索引

  1. _id索引:系统自动生成
  2. 单键索引:db.集合名.ensureIndex({x:1}) 
  3. 多键索引:有单键索引的前提下,创建一个{x:[1,2,3,4,5]}的文档,mongoDB自动帮该文档创建多键索引。
  4. 复合索引:db.集合名.ensureIndex({x:1,y:1})
  5. 过期索引(DTL):db.集合名.ensureIndex({time : ISODate类型},{expireAfterSeconds:10})     在一段时间后自动过期删除的索引。适合登录信息,存储日志。限制:必须的指定的时间类型,如ISODate或ISODate数组,不能使用时间戳,否则不能被自动删除。
  6. 全文索引:db.集合名.ensureIndex({x:'test'})

索引属性:db.集合名.ensureIndex({param},{param})

其中第一个参数是索引的值,第二个参数是索引的属性。

比较重要的属性有:

  1. 名字:db.集合名.ensureIndex({},{name : ""})
  2. 唯一性:db.集合名.ensureIndex({},{unique : true/false})   
  3. 稀疏性:db.集合名.ensureIndex({},{spare : true/false})
  4. 过期性(DTL):db.集合名.ensureIndex({},{expireAfterSeconds:10)

地理位置索引

2D索引:平面地理位置索引

创建方式:db.location.ensureIndex({w:"2d"})

位置表示方式:经纬度[经度,纬度]

取值范围:经度[-180,180]纬度[-90,90] ,注意不能超出范围

查询方式:

  • $near查询:查询距离某个点最近的点
  1. db.location.find({w:{$near:[1,1]}})                // 默认返回100个最近的点
  2. db.location.find({w:{$near:[1,1,$maxDistance:10]}})                // 限制距离最远距离,$near不支持minDistance
  • $geoWithin查询:查询某个形状内的点
{$bos : [[<x1>,<y1>],[<x2>,<y2>]]}   // 矩形
{$center : [[<x1>,<y1>],r]}   // 圆形

{$polygon : [[<x1>,<y1>],[<x2>,<y2>],[<x3>,<y3>]]}   // 多边形

  1. db.location.find({w:{$geoWithin:{$bos : [[<x1>,<y1>],[<x2>,<y2>]]}}})
  2. db.location.find({w:{$geoWithin:{$center : [[<x1>,<y1>],r]}}})
  3. db.location.find({w:{$geoWithin:{$polygon : [[<x1>,<y1>],[<x2>,<y2>],[<x3>,<y3>]]}}})
  • $geoNear查询:查询某个形状内的点,返回详细的数据

猜你喜欢

转载自blog.csdn.net/jamin2018/article/details/80019757