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循环生成十条数据

  

posted @ 2018-10-31 14:51  小二君i  阅读(335)  评论(0编辑  收藏  举报