启动对应server:cd:到mangodb安装根目录下 mongod --dbpath db路径
创建MangoDB服务:
mongod.exe --logpath d:/mongodb/logs/mongodb.log --logappend --dbpath d:/mongodb/db --directoryperdb --serviceName MongoDB -install
补充一下三个命令:(必须以管理员身份运行cmd,然后执行下面的命令)

启动MongoDB:net start MongoDB
停止MongoDB:net stop MongoDB
删除MongoDB:sc delete MongoDB

创建DataBase
use DATABASE_NAME
use mydb
检查当前选择的数据库
db
检查所有数据库
show dbs

创建集合
createConllection(name,options)
option有以下集中
capped  Boolean (可选)如果为true,则启用封顶集合。封顶集合是固定大小的集合,会自动覆盖最早的条目,当他达到最大大小。如果制定true,则需要也指定尺寸参数。
autoIndexID Boolean (可选)如果true,自动创建索引_id字段的默认值是false。
size   number (可选)指定最大大小字节封顶集合。如果封顶是true,那么必须指定这个字段。
max    number (可选)指定封顶集合允许文件的最大数量。
show Conllections
在MongoDB中,不需要创建集合。当插入一些文件 MongoDB show自动创建的集合。

MongoDB支持许多数据类型的列表下面给出:

String : 这是最常用的数据类型来存储数据。在MongoDB中的字符串必须是有效的UTF-8。
Integer : 这种类型是用来存储一个数值。整数可以是32位或64位,这取决于您的服务器。
Boolean : 此类型用于存储一个布尔值 (true/ false) 。
Double : 这种类型是用来存储浮点值。
Min/ Max keys : 这种类型被用来对BSON元素的最低和最高值比较。
Arrays : 使用此类型的数组或列表或多个值存储到一个键。
Timestamp : 时间戳。这可以方便记录时的文件已被修改或添加。
Object : 此数据类型用于嵌入式的文件。
Null : 这种类型是用来存储一个Null值。
Symbol : 此数据类型用于字符串相同,但它通常是保留给特定符号类型的语言使用。
Date : 此数据类型用于存储当前日期或时间的UNIX时间格式。可以指定自己的日期和时间,日期和年,月,日到创建对象。
Object ID : 此数据类型用于存储文档的ID。
Binary data : 此数据类型用于存储二进制数据。
Code : 此数据类型用于存储到文档中的JavaScript代码。
Regular expression : 此数据类型用于存储正则表达式

插入数据:db.collection.insert() 或者 db.collection.save()
db.mycol.insert({title:'123',name:'tony'})
一次插入多行:
db.mycol.insert([{title:'123',name:'tony'},{title:'456',name:'hans'}])

查询
db.database.find()显示非格式化的数据
db.database.find().pretty()显示格式化的数据
findOne()返回一个文件

RDBMS Where子句和MongoDB等同语句

要查询文件的一些条件的基础上,可以使用下面的操作

操作

语法

例子

RDBMS 等同

Equality {<key>:<value>} db.mycol.find({"by":"tutorials yiibai"}).pretty() where by = 'tutorials yiibai'
Less Than {<key>:{$lt:<value>}} db.mycol.find({"likes":{$lt:50}}).pretty() where likes < 50
Less Than Equals {<key>:{$lte:<value>}} db.mycol.find({"likes":{$lte:50}}).pretty() where likes <= 50
Greater Than {<key>:{$gt:<value>}} db.mycol.find({"likes":{$gt:50}}).pretty() where likes > 50
Greater Than Equals {<key>:{$gte:<value>}} db.mycol.find({"likes":{$gte:50}}).pretty() where likes >= 50
Not Equals {<key>:{$ne:<value>}} db.mycol.find({"likes":{$ne:50}}).pretty() where likes != 50

AND 在MongoDB中用法

语法:

在  find() 方法,如果通过多个键分离',',那么 MongoDB 处理 AND 条件。AND 基本语法如下所示:
>db.mycol.find({key1:value1, key2:value2}).pretty()
MongoDB中OR

语法:

OR条件的基础上要查询文件,需要使用$or关键字。OR 基本语法如下所示: 
>db.mycol.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
).pretty()

AND 和 OR 一起使用
下面给出的将显示有像的文件大于100,其标题是“MongoDB Overview'或者是'yiibai' 。等效于 SQL where子句 为 'where likes>10 AND (by = 'yiibai' OR title = 'MongoDB Overview')'
>db.mycol.find("likes": {$gt:10}, $or: [{"by": "yiibai"}, {"title": "MongoDB Overview"}] }).pretty()

修改语法:
update() 方法的基本语法如下
db.COLLECTION_NAME.update(SELECTIOIN_CRITERIA, UPDATED_DATA)
MongoDB Save() 方法
save() 方法替换现有的文档和通过新的文档 save() 方法
替换时必须保证所有长度一致 否则替换失败

查询对应字段方法:
db.COLLECTION_NAME.find({},{KEY:1})
请注意_id字段始终显示在执行find()方法,如果不想这个字段,那么需要将其设置为0
Limit() 方法 查询几条记录 传入数字
db.COLLECTION_NAME.find().limit(NUMBER)
skip() 跳过几条记录
db.COLLECTION_NAME.find().skip(NUMBER)

sort()方法排序
sort() 方法的基本语法如下 1用于升序排列,-1用于降序排列。
db.COLLECTION_NAME.find().sort({KEY:1})

如果不指定排序优先,然后sort() 方法将文档显示在升序排列。
索引支持的解析度的查询效率。如果没有索引,MongoDB 必须扫描每一个文档的集合,要选择那些文档相匹配的查询语句。这种扫描的效率非常低,会要求 mongod 做大数据量的处理。
索引是一种特殊的数据结构,存储设置在一个易于遍历形式的数据的一小部分。索引存储一个特定的字段或一组字段的值,在索引中指定的值的字段排列的。
ensureIndex() 方法创建索引
要创建一个索引,需要使用MongoDB 的ensureIndex()方法。
语法:
ensureIndex() 方法的基本语法如下
db.COLLECTION_NAME.ensureIndex({KEY:1})
db.mycol.ensureIndex({"title":1})
在ensureIndex()方法,可以通过多个字段多个字段上创建索引。
db.mycol.ensureIndex({"title":1,"description":-1})

ensureIndex() 方法也可以接受的选项列表(可选),其下面给出的列表:

background Boolean 在后台建立索引,以便建立索引并不能阻止其他数据库活动。指定true建立在后台。默认值是 false.
unique Boolean 创建唯一索引,以便收集不会接受插入索引键或键匹配现有的值存储在索引文档。指定创建唯一索引。默认值是 false.
name string 索引的名称。如果未指定,MongoDB中都生成一个索引名索引字段的名称和排序顺序串联.
dropDups Boolean 创建一个唯一索引的字段,可能有重复。 MongoDB的索引只有第一次出现的一个键,从集合中删除的所有文件包含该键的后续出现的。指定创建唯一索引。默认值是 false.
sparse Boolean 如果为true,指数只引用文档指定的字段。这些索引使用更少的空间,但在某些情况下,特别是各种不同的表现。默认值是 false.
expireAfterSeconds integer 指定一个值,以秒为TTL控制多久MongoDB的文档保留在此集合.
v index version 索引版本号。默认的索引版本取决于mongodb 运行的版本在创建索引时.
weights document 权重是从1到99999范围内的数,表示该字段的意义,相对于其他的索引字段分数.
default_language string 对于文本索引时,决定停止词和词干分析器和标记生成规则列表的语言。默认值是 english.
language_override string 对于文本索引时,指定的名称在文档中包含覆盖默认的语言,语言字段中。默认值是语言。

聚合操作过程中的数据记录和计算结果返回。聚合操作分组值从多个文档,并可以执行各种操作,分组数据返回单个结果。在SQL COUNT(*)和group by 相当于MongoDB的聚集。
aggregate() 方法
对于在MongoDB中聚集,应该使用aggregate()方法。
语法:
aggregate() 方法的基本语法如下
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
$sum 总结从集合中的所有文件所定义的值. db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
$avg 从所有文档集合中所有给定值计算的平均. db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
$min 获取集合中的所有文件中的相应值最小. db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
$max 获取集合中的所有文件中的相应值的最大. db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
$push 值插入到一个数组生成文档中. db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
$addToSet 值插入到一个数组中所得到的文档,但不会创建重复. db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
$first 根据分组从源文档中获取的第一个文档。通常情况下,这才有意义,连同以前的一些应用 “$sort”-stage. db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
$last 根据分组从源文档中获取最后的文档。通常,这才有意义,连同以前的一些应用 “$sort”-stage. db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])

管道概念

在UNIX 命令 shell 管道是指一些输入和输出作为输入下一个命令等执行操作的可能性。 MongoDB 聚合框架也支持同样的概念。有一组可能的阶段,每个这些的一组文档作为输入,并产生一个结果集的文件(或最终生成的JSON文档在管道末端)。然后又再次被用来为下一阶段等。

可能的阶段聚合框架如下:
$project: 用于选择从收集的一些具体字段。
$match: 这是一个滤波操作,因此可以减少量,作为下一阶段的输入给定的文档。
$group: 如上所讨论的,这不实际的聚合。
$sort: 文件排序。
$skip: 与此有可能向前跳过的文件列表中的一个给定的的文档数量。
$limit: 这限制了的文档数量看一下由从当前位置开始的给定数
$unwind: 这是用来平仓文档的中使用数组。使用数组时,数据是一种pre-joinded,再次有个别文件,此操作将被取消。因此,这个阶段,数量会增加文件的下一阶段。

复制是跨多个服务器同步数据的过程中。复制提供了冗余和增加数据可用性与不同的数据库服务器上的数据的多个副本,复制保护数据库从一台服务器上的损失。复制也可以让恢复硬件故障和服务中断。额外的数据副本,可以奉献一​​到灾难恢复,报告,或备份。

为什么要复制?
为了让数据安全
高(24*7)数据可用性
灾难恢复
无停机维护(如备份,索引重建,压实)
读缩放(额外的副本读取)
副本集对应用程序是透明

MongoDB中复制的工作原理
MongoDB 使用副本集达到复制。副本集是一组 mongod 实例,主机相同的数据集。副本中的一个节点,主节点接收所有的写操作。在所有其他情况下,次要节点,适用于从主操作,以使它们具有相同的数据集。副本集只能有一个主节点。
1副本集是一组中的两个或多个节点(一般至少3个节点是必需的)。
2在副本中设置一个节点是主节点和剩余节点都是次要的。
3从主要到次要节点的所有数据复制。
4自动故障转移或维修的时候,选初级建立,并选出新的主节点。
5失败的节点恢复后,再加入副本集和作品作为辅助节点。
MongoDB 复制是一个典型的图显示在客户端应用程序总是与主节点和主节点,然后将数据复制到二级节点。
副本集特点
• N个节点的群集
• 任何节点可以是主要的
• 所有的写操作为主要的
• 自动故障转移
• 自动恢复
• 主要的共识选择

设置一个副本集

在本教程中,我们将mongod实例转换成独立的副本集。要转换到副本设置遵循以下步骤:
• 关闭停止已经运行的MongoDB服务器。

现在启动MongoDB服务器通过指定  --replSet 选项。 --replSet 基本语法如下:
mongod --port "PORT" --dbpath "YOUR_DB_DATA_PATH" --replSet "REPLICA_SET_INSTANCE_NAME"

例子
mongod --port 27017 --dbpath "D:set upmongodbdata" --replSet rs0

它会启动一个mongod 实例名称rs0 ,端口为27017。启动命令提示符 rs.initiate(),并连接到这个mongod实例。在mongod客户端执行命令rs.initiate()启动一个新的副本集。要检查副本集的配置执行命令rs.conf()。要检查的状态副本sete执行命令:rs.status()。

将成员添加到副本集

将成员添加到副本集,在多台机器上启动mongod 实例。现在开始一个mongod 客户和发出命令 rs.add().

假设mongod实例的名字是mongod1.net它运行端口为27017。这种情况下,到副本集执行的命令rs.add() 在mongod 客户端。rs.add("mongod1.net:27017")

可以添加mongod实例副本设置,只有当连接到主节点。要检查是否连接至初级或mongo 客户端不执行命令db.isMaster()。

MongoDB学习小结的更多相关文章

  1. MongoDB学习笔记:文档Crud Shell

    MongoDB学习笔记:文档Crud Shell   文档插入 一.插入语法 db.collection.insertOne() 将单个文档插入到集合中.db.collection.insertMan ...

  2. MongoDB学习笔记系列

    回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...

  3. flex学习小结

    接触到flex一个多月了,今天做一个学习小结.如果有知识错误或者意见不同的地方.欢迎交流指教. 画外音:先说一下,我是怎么接触到flex布局的.对于正在学习的童鞋们,我建议大家没事可以逛逛网站,看看人 ...

  4. Python 学习小结

    python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...

  5. MongoDB学习笔记—Linux下搭建MongoDB环境

    1.MongoDB简单说明 a MongoDB是由C++语言编写的一个基于分布式文件存储的开源数据库系统,它的目的在于为WEB应用提供可扩展的高性能数据存储解决方案. b MongoDB是一个介于关系 ...

  6. Mongodb学习笔记一(Mongodb环境配置)

    Mongodb学习 说明: MongoDB由databases组成,database由collections组成,collection由documents组成,document由fileds组成.Mo ...

  7. react学习小结(生命周期- 实例化时期 - 存在期- 销毁时期)

    react学习小结   本文是我学习react的阶段性小结,如果看官你是react资深玩家,那么还请就此打住移步他处,如果你想给一些建议和指导,那么还请轻拍~ 目前团队内对react的使用非常普遍,之 ...

  8. MongoDB使用小结:一些不常见的经验分享

    最近一年忙碌于数据处理相关的工作,跟MongoDB打交道极多,以下为实践过程中的Q&A,后续会不定期更新补充. 另有<MongoDB使用小结:一些常用操作分享>,注:本文完成时Mo ...

  9. MongoDB使用小结:一些常用操作分享

    本文整理了一年多以来我常用的MongoDB操作,涉及mongo-shell.pymongo,既有运维层面也有应用层面,内容有浅有深,这也就是我从零到熟练的历程. MongoDB的使用之前也分享过一篇, ...

随机推荐

  1. 关于如何安装使用Git、tortoiseGit、Git@osc

    摘要: 讲解git在git@osc上使用的正确入门姿势. 关于Git代码托管的好处,这里就不再进行说明了.相信想去使用的人都应该有所了解啦.在使用开源中国里面的git@osc时,我们得先做入下几个工作 ...

  2. CSS 图像居中对齐

    CSS  图像居中对齐 我们在<CSS 内外边距>学过内容居中,它的原理是将外边左右设置为auto.图像居中也是这个原理. 示例 <!DOCTYPE html> <htm ...

  3. Process 开启子进程 的两种方式、join控制子进程、守护进程

    一.join控制子进程的一种方式 当主进程需要在子进程结束之后结束时,我们需要用到join来控制子进程. import time import random from multiprocessing ...

  4. object references an unsaved transient instance save the transient instance before flushing

    object references an unsaved transient instance save the transient instance before flushing 对象引用未保存的 ...

  5. Springboot08-项目单元测试(接口测试)

    Springboot08-项目单元测试(接口测试) 前言 1-本文重点在于源码层面,分析Springboot单元测试的使用,对于其中的注解.方法等,不会仔细分析: 2-本文项目实例相关配置:Java- ...

  6. 545. Boundary of Binary Tree二叉树的边界

    [抄题]: Given a binary tree, return the values of its boundary in anti-clockwise direction starting fr ...

  7. php redis pipeline用法

    $redis_110 = Redis::connection('redis_110');$redis_85 = Redis::connection('redis_85');$zadd_key_arr ...

  8. 循序渐进VBA EXCEL数据操作小实例

    1 向指定单元格区域内写入数据 Sub example1() ) arr() = Array("A", "B", "C", "D& ...

  9. vba统计电脑计算机名和登陆的用户名

    Public Sub GetIPT() gipt = Trim(InputBox("请输入所在组,只需输入前面的字母代码即可 A- groupA B-groupB C-groupC D-gr ...

  10. hugepage优势

    hugepage的优势与使用 +2投票   优势 通过使用hugepage分配可以提高性能,因为需要更少的页,因此需要更少Translation Lookaside Buffers (TLB,高速传送 ...