mongodb基本命令,mongodb集群原理分析

集合:

1、集合没有固定数据格式。

2、

数据:

时间类型:

Date() 当前时间(js时间)

new Date() 格林尼治时间(object)

ISODate() 格林尼治时间(object)

转换:

new Date()/ISODate().toLocaleString() 转为本地时间Date()

new Date()/ISODate().valueOf() 转为时间戳

ID:

mongodb每个文档必须有一个_id键

默认_id = ObjectId()(对象)

命令:

数据库:

use db_n 使用库

db db_n 显示库名

show dbs 查看所有库

use database_name 删除库

->db.dropDatabase()

集合:

show collections 查看全部集合

db.createCollection("name", {options}) 创建集合

options:

capped 布尔 true固定集合,须指定size,默认false

size int 固定长度,超过后自动覆盖最早的文档,优先级大于max

autoIndexId 布尔 true自动在_id创建索引,默认true

max int 固定集合包含文档最大数量

db.c_n/db.getCollection("c_n") 使用集合

db.c_n.drop() 删除集合

固定集合:

db.createCollection("log",{capped: true, size: 10000, max: 5000}) 创建限制集合

db.isCapped() 是否为限制集合

db.runConmand({"convertToCapped": "mycoll", size: 100000}) 将集合转化为限制集

操作符:

$ 代表自己

文档:

pretty() 格式化读取

-------------------------------------------------------------------------------------------------------------------------

查询文档:

db.c_n.find({},{指定字段}) 查询文档 ({}中两个同名键,前面查询会被覆盖)

-----

db.c_n.find({},{aa:1,_id:0}) 指定aa字段,排除_id(_id默认会显示)

-----

aa:{$type:1} aa为数字类型

-----

aa: 1 aa = 1

aa:{$lt:50} aa<50

aa:{$lte:50} aa<=50

bb:{$gt:50} bb>50

bb:{$gte:50} bb>=50

bb:{$ne:50} bb!=50

aa:{$gte:10,$lte:20} 10<=aa<=20

aa:{$eq:20} aa=20

aa:{$in: [0,1,2,3] } aa in[]

aa:{$nin: [0,1,2,3] } aa not in[]

-----

$or:[{aa:1},{aa:2}] or

$and:[{},{}] and

$not:{$gt:2} not in (aa>2)

$nor:[] not or

$where:function(){

if(this.age>18){

return true;

}

return false;

}

/

$where:"this.age > 18" 自定义函数逻辑筛选

分页:

db.c_n.find().limit(2) 只查前2条

db.c_n.find().skip(2) 跳过前2条

排序:

db.c_n.find().sort({aa:1,bb:-1}) 排序,aa升序,bb降序

嵌套:

db.c_n.find({"aa.x":2}) 查询x符合的数据

一个:

db.c_n.findOne({}) 查询一个

正则:

aa:/你/ 包含 你

aa:/^你/ 以 你 开头

aa:/你$/ 以 你 结尾

游标:

var aa = db.c_n.find()

aa.hasNext()

aa.next()

-------------------------------------------------------------------------------------------------------------------------

插入文档:

db.c_n.insert(

[ {},{},{} ]/{} ,

{

writeConcern: <document> ,

ordered: <boolean>(是否按顺序插入,默认true顺序添加,出错后面无法添加/false不严格顺序,中间一条错误后面也能添加)

}

) 插入文档

db.c_n.insertOne({}) 插入一个文档

{ "acknowledged" : true, "insertedIds" : [ ObjectId("562a94d381cb9f1cd6eb0e1a"), ] } 返回值

db.c_n.insertMany(

[ {},{},{} ] ,

{

writeConcern: <document> ,

ordered: <boolean>(是否按顺序插入,默认true顺序添加,出错后面无法添加/false不严格顺序,中间一条错误后面也能添加)

}

) 批量(数组形式)添加

{

"acknowledged" : true,

"insertedIds" : [

ObjectId("5ccaa77a8467059db6186d23"),

ObjectId("5ccaa77a8467059db6186d24"),

ObjectId("5ccaa77a8467059db6186d25")

]

} 批量(数组形式)返回值

-------------------------------------------------------------------------------------------------------------------------

批量操作:

如果一个执行list 包含添加、更新 、删除操作 ,mongodb 会把操作分成三个组:第一个 执行insert 操作 第二个执行更新操作  第三个执行删除操作。

var bulk = db.test.initializeOrderedBulkOp();

bluk.insert();

bluk.update();

bluk.find({}).remove();

bluk.getOperations();(查看分组情况)

bluk.execute();(提交) 批量操作(指令)

返回: "batchType" : 1, //1 insert 2 update 3 remove

-------------------------------------------------------------------------------------------------------------------------

db.c_n.save({}) 插入(无_id)/修改(全部替换)

-------------------------------------------------------------------------------------------------------------------------

修改文档:

db.c_n.update(

{

<query>

},

{

<update>

},

{

upsert: <boolean>(不存在记录是否插入 false(默认)不插入/true插入),

multi: <boolean>(false(默认)更新第一条数据/true更新所有匹配数据),

writeConcern: <document>

}

) 修改文档字段

修改符号:

$inc:{aa: 1} 将aa加1

$set:{aa: 2} 把aa字段改为2

$unset:{cc: 1} 将cc字段删除

$push:{aa: 2} (数组)将2添加到aa数组,若不存在数组则自动创建

$pushAll:{aa:[c]} (数组)将c数组添加到aa数组后

$addToSet:{aa:2} (数组)将2添加到数组,2在数组不存在时才添加

$pop:{aa:-1/1} (数组)删除数组最前面、最后面的一个值

$pull:{aa:2} (数组)删除数组中为2的值

$pullAll:{aa:[1,2]} (数组)删除数组批量值

$rename:{old:new} 重命名键

-------------------------------------------------------------------------------------------------------------------------

删除文档:

db.c_n.remove(

{<query>},

{

justOne:<boolean>(是否删除首个 false(默认)否/true是),

writeConcern:<document>

}

) 删除文档

db.c_n.remove({}) 删除所有文档

-------------------------------------------------------------------------------------------------------------------------

类型筛选:

aa:{$type}

typeof 指定类型

-------------------------------------------------------------------------------------------------------------------------

索引:

db.c_n.createIndex(keys,options) 创建单个索引

db.c_n.createIndex({k1,k2,k3},{op}) 创建复合索引1

// db.c_n.ensureIndex({k1,k2,k3},{op}) 创建复合索引2(mongodb3.0开始废弃)

db.c_n.dropIndexes()/dropIndex("_name") 删除索引

db.c_n.getIndexes()/getIndex("_name") 查看索引

db.c_n.totalIndexSize() 索引大小

稀疏索引:

db.c_n.creatIndex({aaa:1},{name:"index1", sparse: true})

非阻塞建立索引:

db.c_n.creatIndex({},{background: true})

唯一索引:

db.c_n.creatIndex({},{unique: true})

TTL(只对时间类型有效):

db.createIndex({},{expireAfterSeconds: 60})

地理空间索引:

db.createIndex({"_name":"2d"})

数据结构:_name:{k1:120,k2:38} 或 _name:[120,38]

地理最近:

find({_name:{$near:[x,y]}}) (默认返回100个)

db.runCommand({geoNear:"c_n",near:[130,38],num:2}) (返回dis距离,stats状态)

*形状范围:

$within

内嵌文档:

db.c_n.createIndex("aaa.xxx",options)

索引排序:

若未对目标字段建立索引,mongodb将会把所有数据提取到内存进行排序,无索引排序使用个数限制的。

注意:

1、联合索引最左缀匹配原则,多条件查询有效。

2、单列多个索引只用到最左边那个。

-------------------------------------------------------------------------------------------------------------------------

统计函数:

db.runCommand({'distinct':'c_n','key':'fied','query':{}})

db.c_n.find({query}).limit(n).count(true/非0) 条件筛选后的数量

db.c_n.count({query}) 数量

db.c_n.distinct(“fied”,{query}) 去重

db.c_n.group({key,reduce,initial[,keyf][,cond][,finalize]}) 分组(最多返回20000个)

分组统计:https://blog.csdn.net/iteye_19607/article/details/82644559

db.c_n.group({

"key":{"k1":true}

"initial":{}

"$reduce":function(){

}

"condition":{query}

})

注意:

db.collection.group()使用JavaScript,它受到了一些性能上的限制。大多数情况下,$ group在Aggregation Pipeline提供了一种具有较少的限制适用的替代。可以通过指定的键的集合中的文档和执行简单的聚合函数

-------------------------------------------------------------------------------------------------------------------------

聚合查询:https://www.cnblogs.com/zhoujie/p/mongo1.html (结果限制大小16m)

db.c_n.aggregate([{ag1},{ag2}]) 聚合查询

$match:{query} 匹配条件

$sort:{aa:1/-1} 排序

$limit:10 输出条数

$skip:20 跳过条数

$unwind:"$aa" 将数组拆分

$out:"c_n" 将结果集迁移到c_n

$group *分组

$group:{_id:"$name",bbb:{$sum:1}}

_id:"$name" 指定分组字段,并以_id键返回数据

$sum 记录每组数据个数

-------------------------------------------------------------------------------------------------------------------------

结果重塑:

-------------------------------------------------------------------------------------------------------------------------

统计例子:

-------------------------------------------------------------------------------------------------------------------------

查询分析:

1、开启profile功能(慢查询记录):

db.getProfilingLevel() 返回level 值0关闭/1慢日志/2

db.setProfilingLevel(level,50(ms)) 记录大于50ms的日志

db.system.profile.find() 查询慢日志

-------------------------------------------------------------------------------------------------------------------------

mongo数据导入导出:

备份/恢复:mongodump/mongorestore

内存日志:journal:db文件下的journal目录

journalCommitInterval = 200 启动项配置journal刷新时间

导入/导出集合:mongoimport/mongoexport

-------------------------------------------------------------------------------------------------------------------------

mongodb集群:

0、副本集原理:

a.一个为主节点,其余的都为从节点。

b.主节点上能够完成读写操作,从节点仅能用于读操作。

c.同步:

(1)第一次启动,删除除了local以外的库,数据全量同步。

(2)同步后,各个从节点通过主节点oplog来复制数据并应用于本地。

(3)宕机或者oplog操作大于一轮未同步,数据全量同步。

(4)从节点通过检查本地oplog最新点和主节点最久点作比较,同步操作。

(5)oplogSize设置较大值避免全量同步。

d.主节点需要记录所有曾删改操作,这些记录保存在local库的oplog文件。

e.oplog:包括:ts时间、op操作类型、ns集合、o文档

(1)oplog为固定集合,超过oplogSize旧值会被覆盖。

(2)oplog 具有幂等性,即无论执行几次其结果一致(例如多次增加)。

(3)oplog包含一个递增的序号来记录操作的时效性。

f.集群中的各节点还会通过传递心跳(默认2s)信息来检测各自的健康状况。

g.主节点选举:

(1)投票,优先级最高的(优先级相同时数据最新的)为主节点。

(2)主节点通过心跳判断集群中多少节点对其可见,小于一半时降级。

(4)选举成功后集群以主节点oplog为最新数据,其他节点的操作都会回

滚,所有节点连接新的活跃节点后要重新同步。这些节点会查看自己的

oplog,找出其中活跃节点没有执行过的操作,然后向活跃节点请求这些操

作影响的文档的最新副本。正在执行重新同步的节点被视为恢复中,在完

成这个过程前,不能成为活跃节点候选者。

(3)参与选举节点数必须大于副本总节点数的一半,如果小于一半则所有

节点变成只读状态。

h.推荐MongoDB副本节点最少为3台,建议副本集成员为奇数,最多12个副

本节点,最多7个节点参与选举,过多时会增加复制压力。

i.所有的Secondary都宕机了,只剩下Primary。最后Primary会变Secondary,

不能提供服务。

1、副本集群管理:

rs.:副本命令,是replSet是缩写,代表副本集。

config={"_id":"shard1", "members":[

{"_id":1,"host":"120.77.37.94:27017","priority":1}

,{"_id": 2,"host":"47.107.174.213:27017","priority":2}

,{"_id": 3,"host":"132.232.156.103:27017","arbiterOnly":true(只作为仲裁节点)}] }

rs.initiate(config)

rs.status() //查看成员的运行状态等信息

rs.config() //查看配置信息

*rs.slaveOk() //允许在SECONDARY节点上进行查询操作,默认从节点不具有查询

功能

rs.isMaster() //查询该节点是否是主节点

rs.add({"ip:port"}) //添加新的节点到该副本集中

rs.remove({"ip:port"}) //从副本集中删除节点

2、主从复制:

--only             从节点指定复制某个数据库,默认是复制全部数据库

--slavedelay       从节点设置主数据库同步数据的延迟(单位是秒)

--fastsync         从节点以主数据库的节点快照为节点启动从数据库

--autoresync       从节点如果不同步则从新同步数据库(即选择当通过热添加了一台从服务器之后,从服务器选择是否更新主服务器之间的数据)

--oplogSize        主节点设置oplog的大小(主节点操作记录存储到local的oplog中)

主节点:

master=true #开启主节点

从节点:

slave=true #开启从节点

source 120.77.37.94:27017 #指定主节点

*shell添加主节点:

use local

db.sourse.insert({"host","120.222.222.22"})

*shell删除主节点:

db.sourse.remove({"host","120.222.222.22"})

3、切片集群:http://www.lanceyan.com/tech/arch/mongodb_shard1.html

注:切片权限和副本集权限是分开管理的。

-------------------------------------------------------------------------------------------------------------------------

mongodb引擎:mongod  --storageEngine mmapv1

1、wiredTiger引擎:3.0新增,3.2之后默认引擎。官方宣称在read、insert和复杂的

update下具有更高的性能。

(1)所有的write请求都基于“文档级别”的lock。

(2)通过在配置文件中指定“cacheSizeGB”参数设定引擎使用的内存量,此内存用于

缓存工作集数据(索引、namespace,未提交的write,query缓冲等)。

(3)wiredTiger每隔60秒(默认)或者待写入的数据达到2G时,将内存中的数据变更

flush到磁盘中的数据文件中,并做一个标记点。

(4)对于write操作,首先被持久写入journal,然后在内存中保存变更数据。journal日

志默认每个100毫秒同步磁盘一次,每100M数据生成一个新的journal文件,journal

默认使用了snappy压缩,检测点创建后,此前的journal日志即可清除。

2、MMAPv1引擎:

(1)所有的write请求都基于“collection”的lock。

(2)将数据文件映射到内存中。

-------------------------------------------------------------------------------------------------------------------------

mongodb版本:

3.2联合查询 look up / mongoose

4.0多文档事物 http://www.mongoing.com/archives/5560

mongodb基本命令,mongodb集群原理分析的更多相关文章

  1. Hazelcast集群原理分析

    简介 hazelcast其中一个很重要的应用就是可以将多个应用服务器组成一个分布式环境的应用,形成一个cluster.这个cluster可以选举出一个master来对外工作.而cluster中的各台服 ...

  2. HDFS的HA集群原理分析

    1.简单hdfs集群中存在的问题 不能存在两个NameNode 单节点问题   单节点故障转移 2.解决单节点问题 找额外一个NameNode备份原有的数据 会出现脑裂 脑裂:一个集群中多个管理者数据 ...

  3. Quartz应用与集群原理分析

    Quartz在CRM中的应用场景: https://tech.meituan.com/mt-crm-quartz.html https://www.mtyun.com/library/mt-crm-q ...

  4. 【MongoDB】在windows平台下mongodb的分片集群(五)

    本篇接着上面的四篇继续讲述在window平台下mongodb的分片集群搭建. 在分片集群中也照样能够创建索引,创建索引的方式与在单独数据库中创建索引的方式一样.因此这不再多说.本篇主要聚焦在分片键的选 ...

  5. MongoDB之分片集群与复制集

    分片集群 1.1.概念 分片集群是将数据存储在多台机器上的操作,主要由查询路由mongos.分片.配置服务器组成. ●查询路由根据配置服务器上的元数据将请求分发到相应的分片上,本身不存储集群的元数据, ...

  6. 搭建一个分布式MongoDB鉴权集群

    今天休假在家,测试并搭建了一个replica set shard MongoDB鉴权集群.replica set shard 鉴权集群中文资料比较少,本文是个人笔记,同时也希望对后来者有所帮助.本文仅 ...

  7. (转)MongoDB分片实战 集群搭建

    环境准备 Linux环境 主机 OS 备注 192.168.32.13 CentOS6.3 64位 普通PC 192.168.71.43 CentOS6.2 64位 服务器,NUMA CPU架构 Mo ...

  8. mongodb 3.4 集群搭建升级版 五台集群

    最新版mongodb推荐使用yaml语法来做配置,另外一些旧的配置在最新版本中已经不在生效,所以我们在生产实际搭建mongodb集群的时候做了一些改进.如果大家不熟悉什么是分片.副本集.仲裁者的话请先 ...

  9. mongodb 3.4 集群搭建:分片+副本集

    mongodb是最常用的nodql数据库,在数据库排名中已经上升到了前六.这篇文章介绍如何搭建高可用的mongodb(分片+副本)集群. 在搭建集群之前,需要首先了解几个概念:路由,分片.副本集.配置 ...

随机推荐

  1. JavaScript 编译器-Babel

    Babel是一个广泛使用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行.这意味着,你可以现在就用ES6.ES7编写程序,而不用担心现有环境是否支持. 一.全局安装babel工具 在保证n ...

  2. comparator接口实现时,只需要实现 int compare(T o1, T o2)方法?

    从Comparator接口的源码,可以看到Comparator接口中的方法有三类: 1 普通接口方法 2 default方法 3 static方法 其中default方法和static方法 是java ...

  3. 《Java并发编程实战》读书笔记-第4章 对象的组合

    设计线程安全的类 三个基本要素: 找出构成对象状态的所有变量 找出约束状态变量的不变性条件 建立对象状态的并发访问管理策略 实例封闭 将数据封装在对象内部,可以将数据的访问限制在对象的方法上,从而更容 ...

  4. Vue路由守卫(跳转页面置顶的处理方)

    在用Vue 框架开发时,在电脑调试没有任何问题,但是用手机调试时会发现页面跳转的不对.就是跳转时页面展示的滑动位置不对,会保留上次跳转页面时的跳转位置.因此需要对页面的路由跳转进行优化,需要用到Vue ...

  5. java架构之路-(Redis专题)redis面试助力满分+

    1.Redis支持的数据类型? 答:五种,在第一节redis相关的博客我就说过,String,Hash,List,Set,zSet,也就是我们的字符串,哈希,列表,集合,有序集合五种.结构图如下. 2 ...

  6. react中使用redux简易案例讲解

    为什么我想要使用redux? 前段时间初步上手了react,最近在使用react的过程中发现对于组件之间通信的需求比较迫切,尤其是在axios异步请求后端数据的时候,这样的需求是特别强烈的!举个例子: ...

  7. Veins(车载通信仿真框架)入门教程

    Veins入门教程——教你如何下手研究 目录 Veins入门教程——教你如何下手研究 目录 废话少说! 讲解omnetpp.ini!(挑关键的) 讲解RSUExampleScnario.ned! 注意 ...

  8. unity5.6.1 videoPlayer

    unity5.6开始增加了videoPlayer,使得视频播放相对比较简单,项目需求进行了一下研究应用,也遇到很多坑,Google 百度一下发现确实有这些问题,一些简单问题如下: 1)播放无声音 2) ...

  9. Spring使用@Async注解

    本文讲述@Async注解,在Spring体系中的应用.本文仅说明@Async注解的应用规则,对于原理,调用逻辑,源码分析,暂不介绍.对于异步方法调用,从Spring3开始提供了@Async注解,该注解 ...

  10. 前后端对称加密(AES)

    后端实现(JAVA) package com.vcgeek.hephaestus.demo; import org.apache.commons.codec.binary.Base64; import ...