MongoDB常用命令
MongoDB中 将表称为一个集合 mongod: mongod --dbpath dir //打开或者新建一个数据库 dir 为数据库目录 mongoimport: mongimport --db test --collection user --drop --file C:\text.json --db 导入的那个库 --collection 导入到那个表 --drop 表示清空原有文档 --file 要导入的文件 mongo: use dbname //进入一个库 若不存在则创建 show dbs // 查看几个库 show collections //查看所有集合 show tables //查询数据库中的表 增 db.collectiongName.insert({x:1,y:2}) //在名为collectionName 的集合中插入一条文档 若集合不存在 则将新建该集合 db.collectionName.insert({time:new Date()}) //可以将当前系统时间插入到记录中 查 db.collectionName.findOne() //返回第一个查找到的结果 等价于 find().limit(1) db.collectionName.find() //查找名为collectionName 的集合的所有记录 db.collectionName.find({k:v}) //查找k的值为v的记录 db.collectionName.find({k1:v1},{k2:v2}) //查找k1的值为v1 且 k2的值为v2的记录 db.collectionName.find({$ro:[{k1:v1},{k2:v2}]}) //查找k1的值为v1 或 k2的值为v2的记录 db.collectionName.find({k:{$gt:v}}) //查找k的值大于v的记录 db.collectionName.find({k:{$lt:v}}) //查找k的值小于v的记录 db.collectionName.find({k:{$gt:v1,$lt:v2}}) //查找k的值大于v1而且小于v2的记录 db.collectionName.find().limit(X) //查找前X条 db.collectionName.find().skip(X) //查找时跳过X条 db.collectionName.find({k:{$exists:true}}) //查找含有m字段的记录 改 db.collectionName.update({k1:v1},{k1:v2}) //查询k1:v1的记录 并将v1更新为v2 db.collectionName.update({k1:v1},{k2:v2}) //查询k1:v1的记录 将所有的记录用k2:v2覆盖 db.collectionName.update({k1:v1},{$set:{k2:v3}}) //查询k1:v1的记录 并将其中的k2的值更新为k3 db.collectionName.update({k1:v1},{k1:v2},{upsert=true}) //查询k1:v1的记录 若k1:v1不存在则创建 k1:v2 的记录 db.collectionName.update({k1:v1},{$set:{k1:v2}},{multi=true}) //查询k1:v1的记录 并将所有的记录的v1的值改为v2 删 记录 db.collectionName.remove({k:v}) //删除所有k值为v的记录 db.collectionName.remove({k:v},{justOne:true}) //删除第一个匹配到k值为v的记录 db.collectionName.remove({}) //清空集合但是不删除集合 集合 db.collectionName.drop() //删除集合 库 db.dropDatabase() //删除当前所在数据库 排序 db.collectionName.find().sort({k1:1},{k2:-1}) //先按照k1进行排序 若有相同次序则按照k2进行排序 1为正序 -1为倒序 统计 db.collectionName.find().count() //将查询到的结果进行统计有多少条目录 索引(使用数据时尽量先创建索引以提高性能) db.collectionName.getIndexes() //获取表的索引情况 db.collectionName.dropIndex(Index) //删除索引 ID索引 当添加记录时就已创建完成 单键索引 db.collectionName.ensureIndex({k:1}) //创建单键索引k 值代表方向 1为正序 -1为倒序 多键索引 当创建完单键索引之后 插入数组数据 单键索引就隐式的转换为多键索引 复合索引 db.collection.ensureIndex({k1:1,k2:1) //当使用find({k1:v1,k2:v2) 就可以使用上面创建的索引了 过期索引 1 在一段时间后会过期的索引 2 索引过期之后 相应的数据就会被删除 3 创建方法 db.collectionName.ensureIndex({time:1},{expireAfterSeconds:10}) //expireAfterSeconds后方添加的是过期时间(单位:S) 过期索引的使用限制 1 存储在过期索引字段的值必须是指定的时间类型(必须是ISODate或者ISODate数组,不能使用时间戳,否则不能被自动删除) 2 如果指定了ISODate数组,则按照最小的时间进行删除 3 过期索引不能是复合索引 4 删除时因运行速度和内部删除机制等 会有误差(最大误差为60秒) 全文索引 全文索引的使用限制 1 每次查询都只能指定一个$text查询 2 $text查询不能出现在$nor查询中 3 查询中如果包括了$text,hint不再起作用 全文索引的创建 db.collectionName.ensureIndex({key:'text'}) //在某字段创建全文索引 db.collectionName.ensureIndex({key_1:'text',key_2:'text'}) //可以创建复合索引 db.collectionName.ensureIndex({"$**":'text'}) //在每个字段都创建全文索引 使用全文索引进行查询 db.collectionName.find({$text:{$search:"aa"}}) //查找关于coffee 的记录 db.collectionName.find({$text:{$search:"aa bb cc"}}) //查找关于aa 或 bb 或 cc 的记录 db.collectionName.find({$text:{$search:"aa bb -cc"}}) //查找关于aa 或 bb 但不包括cc 的记录 db.collectionName.find({$text:{$search:"\"aa\" \"bb\" \"cc\""}}) //查找关于aa bb cc 的记录(且:都包含)的记录 使用引号进行查询 用反斜杠进行转义 全文索引相似度查询 db.db.collectionName.find({$text:{$search:"aa"}},{score:{$meta:"textScore"}}).sort({score:{$meta:"textScore"}}) //将与aa匹配的记录中计算相似度score 并使用sort() 将相似度排序 相似度从高到低排序 地理位置索引 位置表示方式:经纬度[经度,纬度] 取值范围: 经度[-180,180] 纬度[-90,90] 插入纬度 db.collectionName.insert({w:[经,纬]}) 子分类 2d索引,用于储存和查找平面上的点 2dsphere索引,用于储存和查找球面上的点 查找方式 1 查找距离某个点一定距离内的点 2 查找包含在某区域内的点 2D索引:平面位置索引 创建方式 db.collectionName.ensureIndex({w:"2d"}) 查询方式 1 $near查询:查询距离某个点最近的点 db.collectionName.find({w:{$near:[经,纬]}}) //返回一百个距离该点最近的点 db.collectionName.find({w:{$near:[经,纬],$maxBistance:num}}) //返回一百个距离该点最近的点 且 最大距离不超过 num 2 geoNear查询:$near查询的升级版 db.runCommand( {geoNear:<collection>, near:[x,y], minDistance:(对2d索引无效) maxDistance: num: ...... } ) 3 $geoWithin查询:查询某个形状内的点 (1)$box:矩形,使用{$box:[[<x1>,<y1>],[<x2>,<y2>]]}表示 第一个坐标为矩形的左边界 第二个坐标为矩形的右边界 格式 db.collectionName.find({w:{$geoWithin:{$box:[[<x1>,<y1>],[<x2>,<y2>]]}}}) (2)$center:圆形,使用{$center:[[<x1>,<y2>],r]}表示 格式 db.collectionName.find({w:{$geoWithin:{$center:[[<x1>,<y2>],r]}}}) (3)$polygon:多边形,使用{$polygon:[[<x1>,<y1>],[<x2>,<y2>],[<x3>,<y3>]]}表示 每一个坐标为一个点 然后组成一个多边形 格式 db.collectionName.find({w:{$geoWithin:{$polygon:[[<x1>,<y1>],[<x2>,<y2>],[<x3>,<y3>]]}}}) 2dsphere:球面地理位置索引 创建方式 db.collectionName.ensureIndex({w:"2dsphere"}) 位置表示方式 GeoJSON:描述一个点,一条直线,多边形等形状 格式 {type:"",coordinates:[<coordinates>]} 查询方式 支持$maxDistance和$minDistance 索引的属性(名称,唯一性,稀疏性,是否定时删除) 名称的指定(删除时可以使用名字进行删除) db.collectionName.ensureIndex({Index},{name:"Index_name"}) //将默认名称改为Index_name(指定索引名称为Index_name) 唯一性 db.collectionName.ensureIndex({Index},{unique:true/false}) //指定索引为唯一索引 当添加含索引字段的记录时 不允许添加相同的value值 稀疏性 db.collection.ensureIndex({Index},{sparse:true/false}) //在某条记录中若不存在字段 则不会创建索引 以减少磁盘占用并提高性能 当查找该记录时 mongo会自动使用其他类型索引 若使用hint进行指定 则会查询不到(因不存在) 循环 for(i=1;i<=10;i++)db.collectionName.insert({x:i}) //使用for循环生成十条数据