1、前言
最近开始学习使用非关系型数据库MongoDB,并借此机会把学习心得记录下来,所以本博部分资源出自其他博客或记录,如果有侵犯您的权利,请联系mycg@163.com。
2、MongoDB简介
国际惯例,先做下MongoDB介绍:
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。
什么是NoSql? NoSql,全称是 Not Only Sql,指的是非关系型的数据库。下一代数据库主要解决几个要点:非关系型的、分布式的、开源的、水平可扩展的。原始的目的是为了大规模web应用,这场运动开始于2009年初,通常特性应用如:模式自由、支持简易复制、简单的API、最终的一致性(非ACID)、大容量数据等。NoSQL被我们用得最多的当数key-value存储,当然还有其他的文档型的、列存储、图型数据库、xml数据库等。
特点:
高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
- 面向集合存储,易存储对象类型的数据。
- 模式自由。
- 支持动态查询。
- 支持完全索引,包含内部对象。
- 支持查询。
- 支持复制和故障恢复。
- 使用高效的二进制数据存储,包括大型对象(如视频等)。
- 自动处理碎片,以支持云计算层次的扩展性
- 支持Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C++语言的驱动程序,社区中也提供了对Erlang及.NET等平台的驱动程序。
- 文件存储格式为BSON(一种JSON的扩展)。
- 可通过网络访问。
功能:
- 面向集合的存储:适合存储对象及JSON形式的数据。
- 动态查询:Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
- 完整的索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。
- 查询监视:Mongo包含一个监视工具用于分析数据库操作的性能。
- 复制及自动故障转移:Mongo数据库支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转移。
- 高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)
- 自动分片以支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器。
3、MongoDB的安装和配置
3.1)下载MongoDB:http://www.mongodb.org/downloads,以32位的2.0.8版本为例(因为目前高于该版本的暂不支持win xp~~),下载mongodb-win32-i386-2.0.8.zip到本地,将下载的包解压到D盘并重新命名为mongodb,可以看到D:\mongodb\bin里面的.exe文件。
官网安装指引:http://docs.mongodb.org/manual/tutorial/install-mongodb-on-windows/
3.2) 在“D:\mongodb”目录下新建“data”文件夹,它将会作为数据存放的根文件夹。
3.2) 配置MongoDB环境变量。右键 我的电脑 --->属性--->高级--->环境变量,追加D:\mongodb\bin到系统变量Path变量值后面,注意和前面的值用分号;隔开。
3.3)在命令下执行:mongod --dbpath D:\mongodb\data,看到类似下面的内容,说明环境变量配置成功并且成功部署和启动服务端。
也可以在浏览器输入:http://localhost:27017/,可以看到如下提示:
You are trying to access MongoDB on the native driver port. For http diagnostic access, add 1000 to the port number
说明MongoDB数据库服务已经成功启动了。
4、命令操作实例
在MongoDB数据库服务成功启动的情况下,新开命令行窗口,通过命令mongo登录MongoDB shell,如下图
登录到默认test数据库,也可以通过mongo yourDateBaseName 登录到指定数据库(就算该数据库不存在,则新建,但必须往里面写数据才生效)。
MongoDB基本概念:
- 文档 --> 对应关系数据库的行,也就是一条记录。它比关系数据库的行的功能要强大,更像是是某个具体的对象。文档以一种Map的形式展现出来,当然value可以是任意的类型,也可以继续是一个文档(递归的定义)。
- 集合 --> 对应关系数据库的表。但是它又是无模式的,即文档不要求一致。
基本命令操作:
1、显示数据库
show dbs
2、创建数据库:
use yourDateBaseName 这就创建了一个数据库。
不过你用show dbs,并不能显示yourDataBaseName,因为这个数据库没有任何操作。所以如果你直接离开,则本数据库会被废除。
如果你插入一条记录,此时就可以通过show dbs看到对应的数据库
如下:
record = {"name" : "lios", "age" : 30, "password" : "123456"}
db.user.insert(record)
这时使用show dbs就可以看到你的数据库了
3、显示数据库
show collections。默认的包含system.indexes 表
4、创建集合:
因为mongodb中集合是无模式的,不像传统的关系型数据库是需要预先申明表包含哪些字段并且定义字段的属性。虽有无需预先定义。使用的时候直接插入。可以见上面的例子2。
5、删除集合
db.yourCollectionName.drop()
6、将文档插入集合
record = {"name" : "lin", "age" : 20, "password" : "123456"}
db.user.insert(record);
record = {"name" : "lios", "age" : 30, "password" : "123456"}
db.user.insert(record);
record = {"name" : "alicy", "age" : 18, "password" : "123456"}
db.user.insert(record);
7、删除集合中的文档
db.yourCollectionName.remove()
会清空此集合中的所有文档
8、文档更新:采用Mongo的修改器对文档进行修改。
修改器列表:
8.1、
8.1.1、“$set”修改器:用了指定一个健的值。如果健不存在,就创建它。
db.user.update({"name":"lios"}, {"$set" : {"sex" : "male"}})
也可以用自动生产的ID
db.user.update({"_id":ObjectId("510a141f387667b5aac35a82")}, {"$set" : {"sex" : "male"}})
8.1.2、“$unset”删除某个健
db.user.update({"name":"lios"}, {"$unset" : {"sex" : 1}})
8.2、“$inc”修改器用了增加已有的健的值(比如对age+2),或者在键不存在的时候创建一个健(比如该文档不存在age的建,这新建该建,并取值为2)。
db.user.update({"name":"lios"}, {"$inc" : {"age" : 2}})
Tips: $inc 只能用于整数,长整数和双精度浮点数。其他数会导致失败。
8.3、“$push”会向已有的数组末尾加入一个元素,要是没有就会创建一个新的数组。
db.user.update({"name":"lios"}, {$push : {"comments" : "this is my comments"}})
8.4、“$addToSet”在不重复的情况下添加
db.user.update({"name":"lios"}, {"$addToSet" : {"comments" : "your comments"}})
8.5、“$each”数组遍历修改器
db.user.update({"name":"lios"}, {"$addToSet" : {"comments" : {"$each" : ["your comments", "a comments"]}}})
8.6、“$pop”修改器,从数组中删除任何一端删除元素
{$pop : {key : 1}}从数组末尾删除一个元素
{$pop : {key : -1}}从数组头部删除
如:
db.user.update({"name":"lios"}, {$pop:{"comments":1}})
9、upsert,如果存在就更新,如果不存在就根据update的条件插入一条新的记录
10、批量更新
需要设置update的第四个参数为true,否则默认更新第一个匹配的文档
12、查询全部集合
db.user.find()
如果是console的话,默认显示20条记录
db.user.findOne(); 查询并返回一个对象。如果没有找到则返回 null
13、1返回指定的键
db.user.find({"password":"123456"}, {"name":1, "age":1})
根据建password查询,返回键name和健age,同时默认返回_id键的值
14、0指定不返回的建
db.user.find({"password":"123456"}, {"name":0})
返回除name之外的其他键
15、判定条件查询
a) “$lt” 小于
b) “$lte”小于等于
c) “$gt”大于
d) “$gte”大于等于
e) “$ne”不等于
db.user.find({"age" : {"$gte" : 18, "$lte" : 30}})
16、其他条件查询
a) “$in” :是否在某一个集合的查询
db.user.find({"age" : {"$in" : [17,18,19]}})
b) “$nin”:与in相对应,不处于某个结合的文档
c) “$or”:多条件查询
db.user.find({"$or" : [{"age" : 17}, {"age" : 18}]})
d) “$not”非的情况下使用。其他条件可以基于它
e) “$mod”取模查询
f) “$null”可以匹配值为null的字段,同时也能匹配键不存在的文档
如果同时要判定键存在,需要加上"$exists" 判定
17、查询数组
a) “$all” 通过多个元素匹配数组(元素位置随意)
db.user.update({"name":"alicy"}, {"$addToSet" : {"comments" : "a comments"}})
db.user.update({"name":"alicy"}, {"$addToSet" : {"comments" : "your comments"}})
db.user.find({"comments" : {"$all" : ["your comments", "a comments"]}})
b) 数组下标匹配
db.user.find({"comments.2" : "a comments"})
c) "$size"数组长度匹配
db.user.find({"comments" : {"$size" : 2}})
18、采用点表示法查询内嵌文档(推荐)
db.user.update({"name":"lios"}, {"$set" : {"name" : {"first" : "lios", "last" : "L"}}})
db.user.update({"name":"lin"}, {"$set" : {"name" : {"first" : "lin", "last" : "L"}}})
db.user.find({"name.last" : "L"}) 对name的子键last做匹配
db.user.find({"name.last" : "L", "name.first" : "lios"})
19、采用分层的方式查询
db.user.find({"name" : {"last" : "L"}}) 注意这个查不出数据,因为这里是对name做全匹配
db.user.find({"name" : {"first" : "lios", "last" : "L"}})
20、查询后处理方法
coll.find( ... ).sort( {field :1[, field :1] }) 对返回结果进行排序(field ASC)。使用 -1 表示 DESC。
coll.find( ... ).sort( { field : 1 } ) 查找匹配 criteria 的对象,并对 field 进行排序。
coll.find( ... ).limit(n ) 限制结果返回 n 行。如果你只需要某几行数据,推荐这样做来获得最优性能。
coll.find( ... ).skip(n) 跳过 n 行结果。
coll.count() 返回聚集里对象的总数。
coll.find( ... ).count() 返回匹配该查询的对象总数。注意,该返回会忽略 limit 和 skip。比如有100行记录匹配该查询,但是limit为10,count() 仍会返回100。这比你自己循环更快,但仍然需要消耗些时间。
相关推荐
部门绩效考核评价表excel
全面的公司行政费用统计表
视觉跟踪算法综述.pdf
CMD 命令行高级教程精选合编
1、文件内容:apr-devel-1.4.8-7.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/apr-devel-1.4.8-7.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
10-4-生产主管绩效考核表(自动计算、等级评价)
深度学习python基础(第三节) 函数、列表
岗位绩效考核评定表excel表格模板
成品库仓管员绩效考核表
一、智慧环卫管理平台的建设背景与目标 智慧环卫管理平台的建设源于对环卫管理全面升级的需求。当前,城管局已拥有139辆配备车载GPS系统、摄像头和油耗传感器的环卫车辆,但环卫人员尚未配备智能移动终端,公厕也缺乏信息化系统和智能终端设备。为了提升环卫作业效率、实现精细化管理并节省开支,智慧环卫管理平台应运而生。该平台旨在通过信息化技术和软硬件设备,如车载智能终端和环卫手机App,实时了解环卫人员、车辆的工作状态、信息和历史记录,使环卫作业管理透明化、精细化。同时,平台还期望通过数据模型搭建和数据研读,实现更合理的环卫动态资源配置,为环卫工作的科学、健康、持续发展提供决策支持。 二、智慧环卫管理平台的建设内容与功能 智慧环卫管理平台的建设内容包括运行机制体制建设、业务流程设计、智慧公厕系统建设、网络建设、主机和储存平台需求、平台运维管理体系、硬件标准规范体系以及考核评价体系等多个方面。其中,智慧公厕系统建设尤为关键,它能实时监控公厕运行状态,保障公厕的清洁和正常运行。平台建设还充分利用了现有的电子政务网络资源,并考虑了有线和无线网络的需求。在功能上,平台通过普查、整合等手段全面收集环卫车辆、企业、人员、设施、设备等数据,建立智慧环卫基础数据库。利用智能传感、卫星定位等技术实现环卫作业的在线监管和远程监控,实现对道路、公共场所等的作业状况和卫生状况的全面监管。此外,平台还建立了环卫作业网格化管理责任机制,实现从作业过程到结果的全面监管,科学评价区域、部门、单位和人员的作业效果。 三、智慧环卫管理平台的效益与风险规避 智慧环卫管理平台的建设将带来显著的环境、经济和管理效益。环境方面,它将有力推进环境卫生监管服务工作,改善环境卫生状况,为人民群众创造更加清洁、卫生的工作和生活环境。经济方面,通过智慧化监管,大大降低了传统管理手段的成本,提高了监管的准确性和效率。管理方面,平台能够追踪溯源市民反映的问题,如公厕异味、渣土车辆抛洒等,并找到相应的责任单位进行处置,防止类似事件再次发生。同时,平台还拥有强大的预警机制功能,能够在很多环卫问题尚未出现前进行处置。然而,平台建设也面临一定的风险,如部门协调、配合问题,建设单位选择风险以及不可预测的自然灾害等。为了规避这些风险,需要加强领导、统一思想,选择优秀的系统集成商承接项目建设,并做好计算机和应用系统的培训工作。同时,也要注意标准制定工作和相关法律法规的制定工作,以保证系统建设完成后能够真正为环卫管理工作带来便利。
基于平衡计分卡绩效考核表(管理高层)模板
网站运营各部门绩效考核表
XX公司行政部绩效考核指标
基于齿向修形的抛物线锥齿轮仿真分析.pdf
三相半桥逆变器低电压穿越控制策略设计:两级式光伏并网系统电路原理与容量优化报告,两级式光伏并网系统及其低电压穿越控制策略设计,容量30kW。 三相半桥逆变器,boost电路作前级。 带低电压穿越,有一万七千字的报告,没有水文字。 报告内容,电路原理,pi参数设计,bode和根轨迹分析,波形良好 ,关键词:两级式光伏并网系统;低电压穿越控制策略;30kW容量;三相半桥逆变器;boost电路;前级设计;低电压穿越功能;报告内容;电路原理;PI参数设计;Bode和根轨迹分析;波形良好。,基于30kW容量两级式光伏并网系统的控制策略设计:低电压穿越及高效逆变技术研究
毕业设计文本预测项目python源码+托尔斯泰《战争与和平》文本分析数据集-最新出炉 关于数据集 背景: 该数据集包含列夫·托尔斯泰的《战争与和平》的全文,这是一部于 1869 年出版的开创性文学作品。作为公共领域文本,它为对文学分析、自然语言处理和历史研究感兴趣的研究人员和爱好者提供了丰富的资源。这部小说以俄国拿破仑战争为背景,探讨了战争、和平和人类状况的主题。 内容: 数据集由一个纯文本文件组成,其中包含《战争与和平》的完整叙述。文本已进行预处理,以方便分析和建模,使其适用于各种应用,包括文本挖掘、情感分析和机器学习项目。该文件可通过以下链接访问:战争与和平文本数据集。
18 -广告部经理绩效考核表1
永磁同步电机电流内环PR控制Simulink仿真模型:转速电流双闭环矢量控制,波形完美带原理说明与文献参考,永磁同步电机电流内环PR控制Matlab simulink仿真模型,参数已设置好,可直接运行。 属于PMSM转速电流双闭环矢量控制系统模型。 电流内环采用PR控制器,不需要旋转坐标变,在静止坐标下进行矢量控制,转速外环采用PI控制器。 波形完美,包含原理说明文档和参考文献。 ,关键词:永磁同步电机;电流内环PR控制;Matlab simulink仿真模型;PMSM转速电流双闭环矢量控制系统;PR控制器;PI控制器;波形完美;原理说明文档;参考文献。,"基于PR控制的永磁同步电机电流内环仿真模型:静止坐标矢量控制与波形解析"
基于主从博弈理论的共享储能与综合能源微网优化运行策略研究:Stackelberg均衡下的优化调度与运行框架,基于主从博弈理论的共享储能与综合能源微网优化运行研究 关键词:主从博弈 共享储能 综合能源微网 优化调度 参考文档:《基于主从博弈理论的共享储能与综合能源微网优化运行研究》完全复现 仿真平台:MATLAB yalmip+cplex 主要内容:代码主要做的是基于主从博弈理论的共享储能与综合能源微网优化运行研究,首先介绍了系统运行框架,分析了系统内各利益体的功能。 其次,分别针对微网运营商、共享储能服务商以及用户聚合商建立优化运行模型。 进一步,分析了微网运营商与用户聚合商间的博弈关系,提出共享储能背景下微网运营商与用户聚合商间的 Stackelberg 博弈模型,并证明Stackelberg 均衡解的存在性与唯一性。 最后,在 MATLAB平台上进行算例仿真,通过 Yalmip 工具与 CPLEX 求解器进行建模与求解,利用启发式算法与求解器相结合的方法优化微网运营商与用户聚合商的策略。 结果表明,本文所提模型所提模型不仅能有效权衡微网运营商与用户聚合商的利益,也实现了用户聚合商