Mongodb 笔记01 MongoDB 简介、MongoDB基础知识、启动和停止MongoDB

MongoDB 简介

1. 易于使用:没有固定的模式,根据需要添加和删除字段更加容易

2. 易于扩展:MongoDB的设计采用横向扩展。面向文档的数据模型使它能很容易的再多台服务器之间进行分割。自动处理跨越集群的数据和负载,自动重新分配文档。

                   以及将用户请求路由到正确的机器上。

3. 丰富的功能:索引,聚合,特殊的集合类型(过期,固定大小的集合),文件存储。

4. 卓越的性能

 

MongoDB基础知识

1. 文档:文档就是键值对的一个有序集。

    1). MongoDB不但区分类型,而且区分大小写。

    2). 文档中的键值对是有序的:{"x":1,"y":2}与{"y":2,"x":1}是不同的。

2. 集合:集合就是一组文档

    1). 集合是动态模式的。这意味着一个集合里面的文档可以是各式各样的。

    2). 集合命名:不能包含"system.",不能有保留字符'$'

    3). 子集合:组织集合的一种管理是使用"."分割不同命名空间的子集合。很多MongoDB工具类都使用了子集合。在MongoDB中使用子集合来组织数据非常高效,值得推荐。

3. 数据库:在MongoDB中,多个文档组成集合,而多个集合可以组成数据库。

    1). 数据库名区分大小写,即便是在不区分大小写的文件系统中也是如此。简单起见,数据库名应该全部小写。

    2). 数据库最终会变成文件系统里的文件,而数据库名就是相对应的文件名。

    3). 保留数据库:

         admin: 如果将一个用户添加到admin数据库,这个用户将自动获取所有数据库权限。再者,一些特定的服务器命令也只能从admin数据库运行,如列出所有数据库或关闭服务器。

         local: 这个数据库永远不可以复制,且一台服务器上的所有本地集合都可以存储在这个数据库中。

         config:MongoDB用于分片设置时,分片信息会存储在config数据库中。

    4). 把数据库名添加到集合名前,得到集合的完全限定名,即命名空间。命名空间的长度不得超过121字节,且在实际使用中应小于100字节。

4. shell中的基本操作 

    1). insert

    2). find和findOne

    3). update , 至少两个参数,第一个是限定条件(用于匹配待更新的文档),第二个是新的文档

    4). remove , 永久删除,如果没有任何参数,它会删除所有文档

5. 数据类型

    1). 基本类型:null({"x":null}) , 布尔型 , 数值 ,字符串,日期({"x":new Date()} 日期被存储为自新纪元已经过的毫秒,不存储时区),正则表达式,数组,内嵌文档,对象id,

                      二进制数据,代码

    2). ObjectId是"_id"的默认类型。ObjectId的12字节按照如下方式生成:时间戳  机器  PID 计数器

    3). 如果插入文档时没有"_id"键,系统会自动帮你创建一个。可以由MongoDB服务器来做这件事,但通常会在客户端由驱动程序完成。

6. 使用MongoDB shell 

    1). 在启动shell时指定机器名和端口,就可以连接到一台不同的机器: mongo some-host:30000/myDB           //    IP:port/dbname

    2). 启动mongo shell 时不连接到任何mongod有时很方便。通过--nodb参数启动shell,启动时就不会连接任何数据库:mongo --nodb 

          启动之后,在需要时运行new Mongo(hostname)命令就可以连接到想要的mongod了: conn = new Mongo("some-host:30000") , 然后执行 db=conn.getDB("myDB")

    3). 对应MongoDB 特有的功能,shell内置了帮助文档,可以使用help命令查看:help

    4). 可以通过db.help()查看数据库级别的帮助,使用db.foo.help()查看集合级别的帮助

    5). 直接在shell中输入函数名(函数名后不要输入小括号),这样就可以看到相应的JS实现代码。

7. 使用shell执行脚本

    1). 直接在命令中传递脚本:mongo  s1.js   s2.js 

    2). 如需在指定的主机或端口上执行脚本,需指定地址和脚本名称:mongo --quiet server-1:30000/foo s1.js   s2.js

    3). 使用load函数:load("s1.js")

    4). 可以使用脚本将变量注入到shell

8. 创建.mongorc.js 文件

    1). 如果某些脚本会被频繁的加载,可以将它们添加到mongorc.js 文件中。这个文件会在 启动shell时 自动运行。   

    2). .mongorc.js最常见的用途之一是移除那些比较"危险的函数"。可以在这里集中重写这些方法。这种方式并不能保护数据库,只能预防自己手误。

9. 定制shell提示

    通常来说,提示函数中应该包含对getLastError的调用。这样可以捕获数据库错误,而且可以在shell断开时自动重连。

10. 编辑复合变量

      1). shell不可以编辑之前的行。对于大块的代码或者对象,你可能更愿意在编辑器中编辑。为了方便地调用编辑器,可以在shell中设置EDITOR变量(也可以在环境变量后总设置)。

            EDITOR="/usr/bin/emacs"

            现在编辑一个变量,可以使用"edit 变量名"这个命令。修改完后,保存并退出编辑器。变量就会被重新解析然后加载会shell。

      2). 在.mongorc.js文件中添加一行内容,EDITOR="编辑器路径";,以后就不用单独设置EDITOR变量了。

11. 集合命名注意事项:

      1). 可以使用db.collectionName获取一个集合内容,但是如果集合名称中包含保留字或者无效的JS属性名,db.collectionName就不能正常工作了。

      2). 访问一些包含保留字或者无效的JS属性名的集合可以使用:db.getCollection("collectionName")

      3). 数组访问法

 

启动和停止MongoDB

1. 启动MongoDB

    1). 执行mongod程序可启动MongoDB服务器,mongod在启动时可使用很多可配置的选项,在命令行中运行mongod --help可列出这些选项。

    2). mongod 常用配置选项:

         --dbpath : 使用此选项可以指定一个目录为数据目录。需要启动前建立好目录。mongod启动时,会在其数据目录中创建一个mongod.lock文件,以阻止其他mongod进程使用该目录。

         --port : 指定服务器监听端口。默认27017。

         --fork : 启动此选项以调用fork创建子线程,在后台运行MongoDB。启用--fork选项时,必须同时启用--logpath选项。

         --logpath:使用此选项,所有输出信息会被发送到指定文件,而非在命令行上输出。文件不存在就新建,如果存在覆盖。如需保留旧日志,需启动时再增加选项--logappend选项。

         --directoryperdb:启动该选项可将每个数据库存放在单独的目录中。

         --config:额外加载配置文件。该选项通常用于确保每次重新启动时的选项都是一致的。

          举例:./mongd  --port 5586 --fork --logpath mongodb.log --logappend 

     3). 首次安装启动MongoDB时,应查看一下日志,看看都会有哪些警告。

     4). 使用配置文件,启动命令:./mongod --config  mongodb.conf

          配置文件内容举例:

# 这里可以写注释
port=5586
fork=true  # 后台启动
logpath=/var/log/mognodb.log
logappend=true

2. 停止MongoDB

    1). 使用shutdown命令--{"shutdown":1}

    2). shell提供了一个辅助函数,用以简单执行shutdown命令:db.shutdownServer()

    3). 可使用force选项,强制关闭主节点:db.adminCommand({"shutdown":1,"force":true})

    4). kill -2 pid 或者 kill pid 

    5). 在主节点上运行shutdown命令时,服务器在关闭前,会等待备份节点追赶主节点以保持同步。这将回滚的可能性降至最低,但shutdown操作有失败的可能。如果几秒内没有

         备份节点成功同步,则shutdown操作失败,主节点亦不会停止运行。可以使用force选项,强制关闭主节点。这相当于发送一个SIGINT或者SIGTERM信号(几种做法都能使

         MongoDB安全地停止运行,但可能会有数据未能完成同步)。如服务器正在终端作为前台进程运行,那么按下Ctrl+C快捷键也能发送一个SIGINT信号。另外,kill之类的命令,

         也可以用于发送这些信号。假设mongod的PID为10014,那么相应的命令就是kill -2 10014(发送SIGINT信号)或kill10014(发送SIGTERM信号)

    6). mongod收到SIGINT或者SIGTERM信号后,会安全地停止运行。这意味着mongod会等当前正在进行的操作或者文件预分配结束(耗时一定时间),再关闭所有打开的连接,将

         缓存写入硬盘,继而结束运行。但不会等待备份节点追赶上主节点。

3. 安全性

    1). 最好的方式是设置防火墙,只允许内部网络地址对MongoDB的访问。

    2). --bind_ip : 指定MongoDB监听的接口。我们通常将其设置为一个内部IP地址,从而保证应用服务器和集群中的其他成员访问,同时拒绝外网访问。

    3). --nohttpinterface : 关闭默认启动的微型HTTP服务器

    4). --nounixsocket : 禁用UNIX socket 来进行连接。

    5). --noscripting : 禁用服务器端JavaScript脚本的运行。可能会引起一些辅助函数失效。

    6). 数据加密和SSL安全连接

4. 日志

    1). MongoDB会输出大量日志消息,但请不要使用--quiet选项(该选项会隐藏部分日志消息)。保持日志级别为默认值通常不错,此时日志中有足够的信息进行基本调试(如耗时

         过长或启动异常的原因等)。调试应用某特定异常问题时,可以使用一些选项从日志中获取更多信息。

    2). 在重启MongoDB时,可通过在参数中附加数据更多的"v"(即:-v,-vv,-vvv,-vvvv,-vvvvv) 或者运行setParameter命令,完成日志级别(log level)的更改。

         db.adminCommand({"setParameter":1,"logLevel":3})

         记得将日志级别重设为0,否则日志中会存在过多不必要内容。日志级别调高到5时,mongod会在日志中记录几乎所有操作,包括每一个请求所处理的内容。如果记录所有

         内容,会产生大量的磁盘读写操作(IO),可能会拖慢系统运行。

    3). 如需即时看到正在运行的所有操作,打开分析器不失为一个更好的方法。

    4). MongoDB默认记录耗时100毫秒的查询,可以通过setProfilingLevel命令来更改次阈值。

    5). 设置一个计划任务以便每天或者每周分割日志文件。如果使用--logpath选项启动MongoDB,以进程发送一个SIGUSR1信号即时其对日志进行分割。也可以使用logRotate

         命令达到相同目的:db.adminCommond({"logRotate":1})

   

转载于:https://www.cnblogs.com/Jtianlin/p/5084306.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357836.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java实现俄罗斯方块项目

导读:俄罗斯方块项目,基本功能包括:游戏主界面显示模块、方块及数据显示模块、方块移动控制模块、游戏界面颜色控制模块、游戏进度、等级控制模块等。本项目结构如下: (1)游戏主界面显示模块: 显示游戏和帮助两个菜单; 游戏使用功能键盘,得分 等级; (2)画布…

js数组操作大全

shift:删除原数组第一项,并返回删除元素的值;如果数组为空则返回undefined Javascript代码 var a [1,2,3,4,5]; var b a.shift(); //a:[2,3,4,5] b:1 unshift:将参数添加到原数组开头,并返回数组的长度 Javascript代码 var a [1,2,…

mysql与mssql中datetime类型字段问题_excel数据存入sqlserver过程中,遇到Datetime的格式问题。...

先讲一下我实现的大致思路: 1 读取excel数据,赋值到datatable中,然后在页面上显示 细节描述:有一些列是存到数据库时要是datetime格式的,我在赋值到datatable时也是做 如下处理的 DataColumn dtColumn new DataColumn…

java概述_Java 7功能概述

java概述前面我们讨论了所有未纳入Java 7的内容,然后回顾了将其纳入Java的有用的Fork / Join框架 。 今天的帖子将带我们了解Project Coin的每个功能-一系列小的语言增强功能,这些功能虽然不是开创性的,但是对于任何能够使用JDK 7的开发人员来…

java实现即时通讯软件

导读:即时通讯软件即所谓的聊天工具,其主要用途是用于文字信息的传递与文件传输。使用eclipse作为即时通讯软件的开发工具,使用Socket建立通讯渠道,多线程实现多台计算机同时进行信息的传递,swing技术等进行实际开发相对比较合适。通过一些轻松的注册登录后,在局域网中即…

两种类型的Spark RDD task解析以及iterator解析 -- (视频笔记)

spark 每次提交一个作业,都会划分成不同的stage,除了最后一个stage(shuffle map task),前边的stage属于一种类型(result task)。 spark中的job,内部是由具体task构成,由于…

JBoss BRMS复杂事件处理(CEP)性能基准

技术来了又去,但是一件事保持不变。 在设计企业解决方案时,我们喜欢使我们的生活更轻松的复杂组件,并且作为建筑师和开发人员,我们一直在寻找使我们的生活更轻松的方法。 一种方法是跟上与感兴趣的技术有关的流行新站点。 另一种…

python 函数递归一次增加一次变量_python函数局部变量、全局变量、递归知识点总结...

函数局部变量 全局变量 及其作用域 #简单类型(int str等)变量的局部变量与全局变量及其作用域的关系name "xxx" #第一级顶头定义的变量都称为全局变量,其作用域从变量定义的位置开始到此程序结束def Print_Name():print("name before change:"…

java实现出租车计价器

导读: 在我国,出租车行业是八十年代初兴起的一项新兴行业,随着出租车的产生,计价器也就应运而生。但当时在全国没有一家企业能够生产,因而那个时期的计价器是由台湾引进。台湾是计价器的主要生产场地,目前全世界的计价器中有90%为台湾生产。现今我国生产计价器的企业有上…

映像劫持技术(2):实例

在Image File Execution Options下创建cmd.exe项&#xff0c;将其“重定向”到我们自己编写的程序 1 #include<stdio.h>2 #include<windows.h>3 4 int main()5 {6 HKEY hKey;7 DWORD dwDispositionREG_CREATED_NEW_KEY; //新建一个子项8 if((::RegCre…

Hey,孙叫兽的2020 CSDN年度报告已出炉,请查收!

导读&#xff1a;最近经常看到朋友圈有人分享自己2020年在常用平台的年度报告&#xff1a; 有的人分享了这一年来听了多少首歌&#xff0c;最喜爱听的歌是什么&#xff1b; 有的人分享了这一年来消费了多少钱&#xff0c;最喜欢购买的产品类型是什么&#xff1b; 有的人分享了这…

mysql的表创建_MYSQL表创建

Customer属性&#xff1a;ID 字符型 最大10个字符 ——顾客编号NAME 字符型 最大16个字符 ——顾客姓名SEX 字符型 最大2个字符 ——性别MOBILE 字符型 最大11个字符 ——移动电话ADDRESS 字符型 最大50个字符 ——家庭住址约束&#xff1a; ID…

使用Swagger轻松记录您的Play Framework REST API

该帖子最初在http&#xff1a;// swag ger.io&#xff08;7/30/2015&#xff09;上发布 我一直在将Play Framework用作几个项目的基于Java的&#xff0c;快速的REST后端框架。 后来&#xff0c;我很高兴找到Swagger&#xff0c;并努力将其集成到几个项目中。 在我第一次挣扎时…

Java实现qq截图工具

导读:当今时代是飞速发展的信息时代,人们在对信息的处理中对图像的处理量与日俱增,这一点在文档人员上显得非常突出。 本软件采用Java语言进行模拟qq截图功能,获取屏幕方式灵活,可以获取指定的屏幕,并且可以对获取到的截图进行存储,编辑(添加文字)等操作,对这些操作设置了…

mysql查看导入大小_mysql 数据导入、导出,及库大小查看

一、导出数据库用mysqldump命令(注意mysql的安装路径&#xff0c;即此命令的路径)&#xff1a;1、导出数据和表结构&#xff1a;mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql#/usr/local/mysql/bin/ mysqldump -uroot -p abc > abc.sql敲回车后会提示输入密码2、…

java实现儿时的超级玛丽游戏

导读:近年来,Java作为一种新的编程语言,以其简单性、可移植性和平台无关性等优点,得到了广泛地应用。J2SE称为Java标准版或Java标准平台。J2SE提供了标准的SDK开发平台。利用该平台可以开发Java桌面应用程序和低端的服务器应用程序,也可以开发Java Applet程序。 “超级玛丽…

MongoDB实战指南(二):索引与查询优化

数据库保存记录的机制是建立在文件系统上的&#xff0c;索引也是以文件的形式存储在磁盘上&#xff0c;在数据库中用到最多的索引结构就是B树。尽管索引在数据库领域是不可缺少的&#xff0c;但是对一个表建立过多的索引会带来一些问题&#xff0c;索引的建立要花费系统时间&am…

mysql学生选课系统的关系模型_使用PowerDesigner搭建学生选课管理系统(学生老师管理员一体系结构)由基础设计至数据库生成(SQL语句源代码的生成)全过程实例操作...

思考构图大小及范围首先&#xff0c;我们大致的写出要建的几张表&#xff0c;并自定义其Code(所谓Code其实就是自定义一个字段名&#xff0c;因为SQL语句不能由中文)我们可以将不同的表按照不同的类型分开&#xff0c;这样一个类型的表可以一起建并且相互之间的关系不会弄混制作…

java实现飞机大战游戏

导读:现如今,随着智能手机的兴起与普及,加上5G(the 5th Generation mobile communication ,第5代移动通信技术)网络的深入,越来越多的IT行业开始向手机行业转移重心。而手机行业中游戏方面的利润所占比重较大,并且手机游戏大多数则是由Java语言开发研制的。所以我想顺应…

merge语句使用_使用SQL:2003 MERGE语句的奥术魔术

merge语句使用时不时地&#xff0c;由于以下任何原因&#xff0c;我们不得不将INSERT与UPDATE区分开来感到尴尬&#xff1a; 我们必须至少发表两个声明 我们必须考虑性能 我们必须考虑比赛条件 我们必须在[UPDATE; 如果UPDATE_COUNT 0 THEN INSERT]和[INSERT; 如果例外然后…