MongoDB安装 基本操作

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

下载

https://www.mongodb.com/download-center#community
环境变量:MongoDBServer3.4in

MongoDB术语

数据库(数据库)、集合(表格)、文档(行)、字段(列)、嵌入文档(表联合)

常用数据类型

String、 Integer 、Boolean、 Double、 Array、 Date、 Timestamp(时间戳)、 Null(用于创建空值)、 Object(用于内嵌文档)
Symbol 符号,该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言
Code 代码类型,用于在文档中存储 JavaScript 代码。
Object ID 对象ID,用于创建文档的 ID。
Binary Data 二进制数据,用于存储二进制数据。
Regular expression 正则表达式类型,用于存储正则表达式。

操作

1.启动/关闭
	在E:Program FilesMongoDBServer3.4新建目录  db
	在E:Program FilesMongoDBServer3.4目录下运行命令:mongod --dbpath=db --rest 
	win+R:输入mongo可使用基本命令操作
	mongod --shutdown [关闭]
2.连接
	[连接本地数据库服务器]mongodb://localhost	
	[使用用户名和密码连接登陆到指定数据库]mongodb://admin:123456@localhost/test
3.监控(进入到你安装的MongoDB目录下的bin目录)
	E:Program FilesMongoDBServer3.4in>mongostat 	[它会间隔固定时间获取mongodb的当前运行状态]	
	E:Program FilesMongoDBServer3.4in>mongotop	[查看哪些大量的时间花费在读取和写入数据]
4.基本命令
	mongodump -h 127.0.0.1 -d dbname -o c:datadump[数据备份]
1)创建、查询
操作符  大于:$gt 小于:$lt  大于等于:$gte   小于等于:$lte 不等于$ne
	d=({"a1":"hello",b1:45})	[定义一个变量]
	use runoob [数据库不存在,则创建数据库,否则切换到指定数据库]
	show dbs [查看所有数据库]
	show tables [查看集合]
	db.userInfo.getIndexes()[查询当前聚集集合所有索引]
	db.userInfo.dataSize()	[查看数据空间大小]
	db.userInfo.getDB()		[得到当前聚集集合所在的]
	db.userInfo.stats()		[得到当前聚集的状态]
	db.userInfo.totalSize()	[得到聚集集合总大小]
	db.userInfo.storageSize()		[聚集集合储存空间大小]
	db.userInfo.getShardVersion()	[Shard版本信息  ]
	db.userInfo.renameCollection("users")	[聚集集合重命名,将userInfo重命名为users]
	db.runoob.findOne();
	db.runoob.find() [查看集合中所有数据]
	db.runoob.count() [返回文档个数]
	db.userInfo.find({}, {name: 1, age: 1})		[select name, age from userInfo]
	db.userInfo.find({age:{$gt:25}},{name:1,age:1})	[select name, age from userInfo where age >25]
	db.runoob.find({$or:[{age: 22},{age: 25}]}) [查找age=22或age=25的文档]
	db.col.find({"likes": {$gt:50}, $or: [{"by": "we"},{"title":"t1"}]}) [and和or复用]
	db.funoob.find({id:{$in:[12,34,33]}})  		[查找id为12,34,33的文档]
	db.runoob.find({"name" : {$gt : 100}})		[获取runoob集合中 "name" 大于 100 的数据]
	db.col.find({"title":1,_id:0}).limit(2) 	[显示符合条件的两条记录]
	db.col.find({"title":1,_id:0}).limit(100).skip(10)	[读取从 10 条记录后 100 条记录]
	db.col.find({"title":1,_id:0}).sort({"likes":-1})	[ col 集合中的数据按字段 likes 的降序排列]
	db.col.find({name:{$regex:"jack",$options:"$i"}})   [正则表达式查询jack不分大小写]
	db.th2.find({name:{$regex:"^j"}})	[查询name字段中j开头的所有文档]
	db.th2.find({name:{$regex:"runoob"}})	[查找包含 runoob 字符串的文章]
	db.th2.find({name:/runoob/})	[查找包含 runoob 字符串的文章]
2)插入数据
	db.runoob.insert({"name":"菜鸟教程"}) 			[use runoob,进入runnob数据库,在集合runboob中插入文档]
	db.runoob.insert([{name:"tom"},{name:"jack"}])	[插入多个文档]
3)更新
	 db.runoob.update({"ji":90},{$set:{"ji":"hello"}}) [将ji为90的第一个文档更新为hello]
	 db.test_collection.updateMany({"age":{$gt:"10"}},{$set:{"status":"xyz"}}) [更新多个文档]
4)删除
	db.dropDatabase() 	[删除数据库]
	db.book.drop() [删除集合book]
	db.book.remove({"title":"1"}) [删除文档(可删除多个)]
	db.book.remove({"title":"1"},true) [删除单个文档]
5)查询分析
	db.book.ensureIndex({name:1,id:1})	[book集合中创建name、id索引]
	db.book.find().explain();	[explain 操作提供了查询信息,使用索引及查询统计等]
[全文检索]	
	2.6 版本之前启用全文检索
	db.adminCommand({setParameter:true,textSearchEnabled:true})
	或mongod --setParameter textSearchEnabled=true
	db.book.ensureIndex({"name":"text"})		[name字段建立全文检索]
	db.book.find({$text:{$search:"runoob"}})[使用全文索引搜索文章中的关键词 runoob]
	db.book.getIndexes()					[删除全文索引]
6)原子操作
	$set:用来指定一个键并更新键值,若键不存在并创建 
		{ $set : { field : value } }
	$unset:用来删除一个键
		{ $unset : { field : 1} }
	$inc:可以对文档的某个值为数字型(只能为满足要求的数字)的键进行增减的操作
		{ $inc : { field : value } }
	$push:把value追加到field里面去,field一定要是数组类型才行,如果field不存在,会新增一个数组类型加进去
		{ $push : { field : value } }
	$pushAll:同$push,只是一次可以追加多个值到一个数组字段内
		{ $pushAll : { field : value_array } }
	$pull:从数组field内删除一个等于value值。
		{ $pull : { field : _value } }
	$addToSet:增加一个值到数组内,而且只有当这个值不在数组内才增加
	$pop:删除数组的第一个或最后一个元素
		{ $pop : { field : 1 } }
	$rename:修改字段名称
		{ $rename : { old_field_name : new_field_name } }
	$bit:位操作,integer类型
		{$bit : { field : {and : 5}}}
7)MapReduce 命令
	使用 MapReduce 要实现两个函数 Map 函数和 Reduce 函数,Map 函数调用 emit(key, value),
	遍历 collection 中所有的记录, 将 key 与 value 传递给 Reduce 函数进行处理。
	db.collection.mapReduce(
		function(){emit(key,value);},//map函数
		function(key,values){return reduceFunction},//reduce函数
		{	
			out:collection,
			query:documet,
			sort:document,
			limit:number,
		}
	)
	参数说明:
		map :映射函数 (生成键值对序列,作为 reduce 函数参数)。
		reduce 统计函数,reduce函数的任务就是将key-values变成key-value,也就是把values数组变成一个单一的值value。。
		out 统计结果存放集合 (不指定则使用临时集合,在客户端断开后自动删除)。
		query 一个筛选条件,只有满足条件的文档才会调用map函数。(query。limit,sort可以随意组合)
		sort 和limit结合的sort排序参数(也是在发往map函数前给文档排序),可以优化分组机制
		limit 发往map函数的文档数量的上限(要是没有limit,单独使用sort的用处不大)

  

原文地址:https://www.cnblogs.com/boye169/p/14443947.html