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. [USACO17FEB]Why Did the Cow Cross the Road III S

    题目描述 Why did the cow cross the road? Well, one reason is that Farmer John's farm simply has a lot of ...

  2. 8种常见的SQL错误用法

    常见SQL错误用法 1. LIMIT 语句 分页查询是最常用的场景之一,但也通常也是最容易出问题的地方.比如对于下面简单的语句,一般DBA想到的办法是在type, name, create_time字 ...

  3. 【OUC2019写作】论文写作第九小组英语常用表达整理

    第一部分:  一.简要综述以往和现在研究: 某方法被认为如何如何:it is well known that; it is regarded as; it is believed to ; It is ...

  4. Https工作流程图

  5. static self 区别与总结

    <?php /** * static self 区别与总结 * 总结: * 1.在 PHP 里,在没有继承时候,你用self::class 和 static::class是一样的,都是获取当前类 ...

  6. 06 python学习笔记-常用模块(六)

    一.  模块.包 1.什么是模块? Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句,是用来组织代码的.模块能定义函数 ...

  7. 在.net core3.0中使用SignalR实现实时通信

    最近用.net core3.0重构网站,老大想做个站内信功能,就是有些耗时的后台任务的结果需要推送给用户.一开始我想简单点,客户端每隔1分钟调用一下我的接口,看看是不是有新消息,有的话就告诉用户有新推 ...

  8. openresty性能测试报告分析

    一.openresty介绍 1.什么是openresty 通过揉和众多设计良好的 Nginx 模块,OpenResty 有效地把 Nginx 服务器转变为一个强大的 Web 应用服务器,基于它开发人员 ...

  9. 微服务SpringCloud之GateWay路由

    在前面博客学习了网关zuul,今天学下spring官方自带的网关spring cloud gateway.Zuul(1.x) 基于 Servlet,使用阻塞 API,它不支持任何长连接,如 WebSo ...

  10. SpringBoot与MybatisPlus整合之活动记录(十五)

    活动记录和正常的CRUD效果是一样的,此处只当一个拓展,了解即可 pom.xml <dependencies> <dependency> <groupId>org. ...