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

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

  1. PyTorch学习笔记(二):PyTorch简介与基础知识

    往期学习资料推荐: 1.Pytorch实战笔记_GoAI的博客-CSDN博客 2.Pytorch入门教程_GoAI的博客-CSDN博客 本系列目录: PyTorch学习笔记(一):PyTorch环境安 ...

  2. 微型计算机中储存器可分啊喂,01第一章微型计算机基础知识..ppt

    01第一章微型计算机基础知识. 学习方法 学习方法很重要 复习并掌握先修课的有关内容 课堂:听讲与理解.适当笔记 课后:认真复习.完成作业 实验:充分准备.勇于实践 3.计算机发展简史 1)机械计算机 ...

  3. DL:深度学习(神经网络)的简介、基础知识(神经元/感知机、训练策略、预测原理)、算法分类、经典案例应用之详细攻略

    DL:深度学习(神经网络)的简介.基础知识(神经元/感知机.训练策略.预测原理).算法分类.经典案例应用之详细攻略 目录 深度学习(神经网络)的简介 1.深度学习浪潮兴起的三大因素 深度学习(神经网络 ...

  4. mac系统下安装、启动、停止mongodb

    MongoDB 下载地址: https://www.mongodb.com/download-center?jmp=nav#community nodejs下载地址: https://nodejs.o ...

  5. access2013数据库实验笔记_医学科研实验基础知识笔记(十):甲基化

    往期回顾 医学科研实验基础知识笔记(一):细胞增殖 医学科研实验基础知识笔记(二):细胞凋亡检测 医学科研实验基础知识笔记(三):细胞周期检测 医学科研实验基础知识笔记(四):细胞自噬研究策略 医学科 ...

  6. Linq的简介和基础知识学习

    学习LINQ之前,我们要知道LINQ是干什么,解决什么问题的,怎样学习? 一.LINQ简介 1.什么是LINQ? 什么是LINQ?LINQ中文翻译为语言集成查询(Language Integrated ...

  7. 【学习笔记】投资理财,基金基础知识科普入门学习,凭运气赚回来的钱,会凭实力亏掉_20210115

    [理财笔记] 理财举例:年收入20万,月入2万现金流,如何理财? 1.指数基金:了解大盘趋势,4分之一的钱 2.股票基金:了解行业基金,4分之一的钱 3.货币基金:了解货币基金,比如余额宝,4分之一的 ...

  8. Windows 平台安装 MongoDB数据库(检测是否安装成功、启动和关闭MongoDB数据库)

    参考: 菜鸟教程: Windows 平台安装 MongoDB | 菜鸟教程 windows平台mongoDB安装配置 - ymwangel - 博客园 1.安装: 去官网下载MongoDB Commu ...

  9. 软考高级架构师笔记-6计算机系统性能评价信息系统基础知识

    目录 1. 前言 & 考情分析 2. 系统配置与性能评价 1. 性能指标 2. 性能指标 3. 阿姆达尔解决方案 3.信息系统基础知识 1.信息系统的分类 2.信息系统的生命周期 3.信息系统 ...

最新文章

  1. 红旗linux yum,更换红旗Linux: Asianux的yum源为网易源
  2. ubuntu中如何使用中文输入法
  3. (转)利用快速开发框架,快速搭建微信浏览博客园首页文章
  4. 5 java中的集合类_java基础(5)-集合类1
  5. SAP为企业不同员工带来了什么?
  6. Spring MVC 解读——@Autowired、@Controller、@Service从原理层面来分析
  7. Vue2的核心原理剖析
  8. java面试题_208道Java面试题,
  9. linux虚拟机lvm扩容,LVM扩容-----给虚拟机添加空间
  10. java 文本框输入监听事件_JAVA GUI 事件监听事件 详解 和 案例.
  11. 杭电OJ 1046(C++)
  12. pycharm如何设置官方中文?pycharm如何汉化?pycharm终于支持官中了!!!
  13. Fermat theorem (stationary points)
  14. 【思特奇杯·云上蓝桥-算法集训营】第1周——了解算法与数据结构
  15. ICPR 2022 | 第一届卫星视频运动目标检测与跟踪挑战赛正式开赛
  16. 面试中有关接口测试和接口自动化的那些事 ~
  17. Android创建前台运行的Service
  18. 计算机学院新生教育讲话,吴兴隆在数计学院2017级新生开学典礼上的讲话
  19. 艺术市场的区块链革命
  20. 大数据正式Zebra1

热门文章

  1. python调试器入门教程_PyCharm入门第一步(二)——调试第一个Python应用|python基础教程|python入门|python教程...
  2. python判断字符串在元祖_Python基础(2)——字典、元祖、字符串方法、非空即真、文件...
  3. aes子密钥生成c语言_一种基于流密码算法的子密钥生成方法与流程
  4. background 互联网图片_cssbackground-image和layer-background-image的区别
  5. 信工干货||C语言输入输出语句
  6. 干货 | C语言系列3——常量,运算符,常用数学函数......
  7. java接口自动化Excel占位符_基于maven+java+TestNG+httpclient+poi+jsonpath+ExtentReport的接口自动化测试框架...
  8. python函数参数学习_python学习笔记-11.函数参数和返回值进阶
  9. quartz java 线程 不释放_java Quartz 内存泄漏
  10. ospf工作原理_OSPF动态路由配置经典案例