- -----------------------------------------------------前言-----------------------------------------------------
- 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({x.y:10}) // 查找x字段下的字典中y为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起到很好的相似度排序效果。
索引
- _id索引:系统自动生成
- 单键索引:db.集合名.ensureIndex({x:1})
- 多键索引:有单键索引的前提下,创建一个{x:[1,2,3,4,5]}的文档,mongoDB自动帮该文档创建多键索引。
- 复合索引:db.集合名.ensureIndex({x:1,y:1})
- 过期索引(DTL):db.集合名.ensureIndex({time : ISODate类型},{expireAfterSeconds:10}) 在一段时间后自动过期删除的索引。适合登录信息,存储日志。限制:必须的指定的时间类型,如ISODate或ISODate数组,不能使用时间戳,否则不能被自动删除。
- 全文索引:db.集合名.ensureIndex({x:'test'})
索引属性:db.集合名.ensureIndex({param},{param})
其中第一个参数是索引的值,第二个参数是索引的属性。
比较重要的属性有:
- 名字:db.集合名.ensureIndex({},{name : ""})
- 唯一性:db.集合名.ensureIndex({},{unique : true/false})
- 稀疏性:db.集合名.ensureIndex({},{spare : true/false})
- 过期性(DTL):db.集合名.ensureIndex({},{expireAfterSeconds:10)
地理位置索引
2D索引:平面地理位置索引
创建方式:db.location.ensureIndex({w:"2d"})
位置表示方式:经纬度[经度,纬度]
取值范围:经度[-180,180]纬度[-90,90] ,注意不能超出范围
查询方式:
- $near查询:查询距离某个点最近的点
- db.location.find({w:{$near:[1,1]}}) // 默认返回100个最近的点
- 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>]]} // 多边形
- db.location.find({w:{$geoWithin:{$bos : [[<x1>,<y1>],[<x2>,<y2>]]}}})
- db.location.find({w:{$geoWithin:{$center : [[<x1>,<y1>],r]}}})
- db.location.find({w:{$geoWithin:{$polygon : [[<x1>,<y1>],[<x2>,<y2>],[<x3>,<y3>]]}}})
- $geoNear查询:查询某个形状内的点,返回详细的数据