zoukankan      html  css  js  c++  java
  • MongoDB常用命令

    MongoDB中 将表称为一个集合
    
    mongod:
    	mongod --dbpath dir		
    	//打开或者新建一个数据库 dir 为数据库目录
    
    mongoimport:
    	mongimport --db test --collection user --drop --file C:	ext.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循环生成十条数据
    

      

  • 相关阅读:
    Ubuntu下手动安装vscode
    VMware Tools安装后设置自动挂载解决共享文件夹无法显示的问题
    VMware Tools安装方法及共享文件夹设置方法
    JavaScript原始类型转换和进制转换
    Javascript的数据类型(原始类型和引用类型)
    设计模式(六)观察者模式
    设计模式(五)之适配器模式
    设计模式(四)注册模式 解决:解决全局共享和交换对象
    设计模式(三)单例模式
    设计模式(二)之策略模式
  • 原文地址:https://www.cnblogs.com/xiaoerjun/p/9883102.html
Copyright © 2011-2022 走看看