MongoDB主要知识

MongoDB的可视化工具之Navicat 本文来说下MongoDB的可视化工具之Navicat 文章目录概述 概述 阅读详情

MongoDB是目前工作中经常使用到的NoSQL数据库。

本博客只记录相关理论知识和技巧,涉及到实践的部分都会单开Blog来记录实践过程。

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

体系结构:

一般一个MongoDB Server包含一个实例和多个数据库,也可以多个实例和多个数据库。

MongoDB默认数据目录是/data/db,它存储所有mongodb的数据文件。

每个数据库都包含一个.ns文件和一些数据文件,而且这些数据文件会随着数据量的增加越来越多。


MongoDB内部有预分配空间的机制,每个预分配的文件都用0进行填充。

数据文件每新分配一次,它的大小都是上一个数据文件大小的2倍,每个数据文件最大2G。


MongoDB每个集合和每个索引都对应一个命名空间,这些命名空间的元数据集中在16M的*.ns文件中,平均每个命名占用约 628 字节,也即整个数据库的命名空间的上限约为24000。

如果每个集合有一个索引(比如默认的_id索引),那么最多可以创建12000个集合。如果索引数更多,则可创建的集合数就更少了。同时,如果集合数太多,一些操作也会变慢。

要建立更多的集合的话,MongoDB 也是支持的,只需要在启动时加上“--nssize”参数,这样对应数据库的命名空间文件就可以变得更大以便保存更多的命名。这个命名空间文件(.ns文件)最大可以为 2G。

每个命名空间对应的盘区不一定是连续的。与数据文件增长相同,每个命名空间对应的盘区大小都是随分配次数不断增长的。目的是为了平衡命名空间浪费的空间与保持一个命名空间数据的连续性。

需要注意的一个命名空间$freelist,这个命名空间用于记录不再使用的盘区(被删除的Collection或索引)。每当命名空间需要分配新盘区时,会先查看$freelist是否有大小合适的盘区可以使用,如果有就回收空闲的磁盘空间。


MongoDB默认存储数据目录为/data/db,默认端口为27017,默认HTTP端口为28017。


MongoDB一般参数:

Journal -- 开启日志,通过保存操作日志来降低单机故障恢复的时间。

Syncdelay -- 系统同步刷新磁盘的时间,单位为秒,默认60秒。

Repairpath – 执行repair时的临时目录,在如果没有开启journal,异常down机后重启,必须执行repair操作。

执行mongod –help可以看见对大多数参数的解释。


停止mongodb:

(1)Ctrl + C

(2)>mongo –port 20813

>use admin

>db.shutdownserver();

(3)kill -2 PID


不要预先插入集合,在第一次插入的时候会自动创建。

使用find查询时,如果数据过多则不会全部显示,使用it命令继续迭代输出。

>it (迭代输出)


MongoDB每个文档都有一个默认的主键_id,这个主键名称是固定的。可以是MongoDB支持的任何数据类型,默认是ObjectId。但同一个集合中_id类型必须唯一,且不能插入值相同的数据。

 

 

创建数据库

use dbname

这样就创建了一个数据库。如果什么都不操作离开的话,这个库就会被系统删除。

show dbs //查看数据库

showcollections  //查看集合


基本操作

db.collection.update({a:99},{$set:{a:2}})  //update

db.collection.remove({a:2})   //remove {a:2}

db.collection.remove()   //remove all


db.collection.find()

db.collection.find({name:”mongo”})

db.collection.findOne({name:”mongo”})

 

db.collection.find({a:{$gt:3}})  // a > 3

db.collection.find({a:{$lt:5}})  // a < 5

db.collection.find({a:{$gte:3}})  // a >= 3

db.collection.find({a:{$lte:5}})  // a <= 5

db.collection.find({a:{$gte:3,$lte:5}})  // 3 <= a <= 5

 

db.collection.find({a:{$all:[6,8]}})  //不同于$in,$in满足其中一个值,$all必须满足所有值。

db.collection.find({a:{$exists:true}})  //存在a字段的记录

 

db.collection.find({a:null}})  //a字段为null或者不存在a字段都会查询出来

db.collection.find({a:{$in:[null],$exists:true}}})  //只查询出a为null的记录

 

db.collection.find({age:{$mod:[3,1]}})  //查询出age模3等于1的记录

db.collection.find({age:{$ne:7}})  // age<>7

db.collection.find({age:{$in:[7,8]}})  //显示age为7或8的记录

db.collection.find({age:{$nin:[7,8]}})  //查询age值在7,8外的记录

 

db.collection.find({name:’Sue’},{$pull:{‘languages’:’scala’}});   //移除数组中的项

db.collection.find({name:’Sue’},{$push:{‘languages’:’ruby’}});  //加入数组中的项

 

db.collection.find().limit(5);  //返回最前面的5条

db.collection.find().limit(0);  //返回所有记录

db.collection.find().skip(2);  //返回时跳过前2条

db.collection.find().sort({­a:1}) //排序:1升序,-1降序

 

db.collection.count();  //返回所有记录数

db.collection.find().limit(5).count();  //返回所有记录数

db.collection.find().limit(5).count(true);  //返回限制后的记录数

 

db.testcoll.find({},{col:true})   //只查询col列

db.testcoll.find({‘_id’:ObjectId(‘1234567890’)});  //按主键查询

 

查询嵌入的document

 db.people.find({"name": {"first" : "Joe", "last" :"Schmoe"}})

要加一个middle name,这个查询就不行了,这种查询必须匹配整个嵌入的document,而且key是有顺序.

db.people.find({"name.first" :"Joe"})

这样可以直接查询嵌入文档中的key。因此document中的key不能包含”.”。

更新嵌套文档

db.testcoll.update({“name”:{"first" : "Joe"},{$set: {"first" : "Joe123"}}})  //更新嵌套文档

或

db.testcoll.update({'b.c':'123'},{$set:{'b.c':'456'}})   


capped collection

capped collection有固定大小,以LRU规则自动维护插入顺序。

在创建时要预先指定大小,空间用完,新添加的对象会替代最旧的对象。

不允许删除,但可以调用drop()删除集合中的所有行,但drop后需要显示的重建集合。32位机上capped collection的最大值482.5M,64位只受系统文件大小的限制。

 

常见用途:

MongoDB中日志机制的首选:MongoDB没有使用日志文件,而是把日志存储在数据库中。

在一个没有索引的capped collection中插入对象的速度与在文件系统中记录日志的速度相当。

Cache:需要在capped collection上建一个索引,因为读比写多。

Auto Archiving:利用capped collection的age-out特性,省去了写cron做人工归档的工作。


如果capped collection的写比读多,最好不要在上面建索引,否则速度从log speed降到database speed。

使用nature ording可以有效地检索最近插入的元素,因为capped collection能保证自然排序就是插入时的顺序,类似于log文件上的tail操作。


db.createCollection(“testcoll”,{capped:true,size:100000,max:100,autoIndexId:false});

capped – 是否为capped collection。

size – 占用空间大小(bytes)。

max – 最大的document记录数,max=1 无限制。

autoIndexId  -- 是否在_id列上自动创建索引。


db.testcoll.validate();   //查看一个collection使用空间

默认对一般collection建立索引,但是不对capped collection建立索引。

 

GridFS

使用两个表来存储:

files包含元数据对象,chunks包含其它一些相关信息的二进制块。为了使多个GridFS命名为一个单一的数据库,文件和块都有一个前缀,默认情况下前缀是fs,所以任何默认的GridFS存储包括命名空间fs.files和fs.chunks。

./mongofiles put testfile  //存储文件

./mongofiles list   //列出存储的文件

show collections  //查看集合存储文件

db.fs.files.find()   //查看fs.files中的内容

结果中:

Filename -- 文件名

Chunksize – chunks分块大小

uploadDate – 分块时间

md5 – 文件的md5值

length –文件大小字节

fs.files中存储的是元数据信息

 

db.fs.chunks.find()   //查看fs.chunks中的内容

结果中:n代表chunks的序号

fs.chunks中存储的是文件实际内容数据

 

./mongofiles get testfile  //取出文件

md5sum testfile  //md5校验 – 跟gridfs中文件存储的md5相同

 

为gridfs的chunks建立索引:

db.fs.chunks.ensureIndex({files_id:1,n:1},{unique:true});

一个块就可以用他的files_id和n值进行检索.

即查询块:

db.fs.chunks.findOne({files_id:myFileID,n:0});

时就会用到索引提高查询速度。

 

 

命令行操作

使用eval执行语句:

./mongo testcoll --eval"printjson(db.testcoll.count())

返回testcoll集合总记录数

 

执行指定文件中的内容:

./mongo --quiet t1_count.js

执行js脚本内容,--quiet参数去除登录信息,使结果更清晰.

 

进程控制

查看活动进程:

db.currentOp() 

响应:

Opid – 操作进程号

Op – 操作类型

Ns – 命名空间

Query – 如果操作类型是查询,显示查询内容

LockType – 读锁还是写锁

 

结束进程:

db.killOp(opid);

不要kill内部发起的操作,如replica set发起的sync操作。

 

 

索引

索引信息被保存在system.indexes中,默认总是为_id创建索引。

db.testcoll.ensureIndex({age:1});  //在age上创建索引,1升序,-1降序

db.testcoll.ensureIndex({age:1},{backgroud:true});//当已有大量数据时,在后台创建索引。

 

db.testcoll.getIndexes();   //查看索引

_id索引是自动创建的索引,这个索引是不能删除的。

 

文档索引

索引可以是任何类型的字段甚至文档。

db.testcoll.insert({name:123,addr{city:Beijing,state:BJ}})

建立索引:db.ensureIndex({addr:1})

查询时必须按照建立索引的文档顺序查询,才能用到索引:

db.testcoll.find({addr{city:Beijing,state:BJ}})

下面的不会用到索引:

db.testcoll.find({addr{state:BJ, city:Beijing}})

 

组合索引

db.ensureIndex({‘addr.city’:1,’addr.state’:-1})

查询时:只按{addr.city}查询或排序会用到索引,或者按{addr.city,addr.state}顺序查询或排序也会用到索引。

 

唯一索引

db.testcoll.ensureIndex({firstname:1,lastname:1},{unique:true}) //创建

如果数据库中已有重复记录则无法创建唯一索引。

 

查询时强制使用索引

db.testcoll.ensureIndex({name:1,age:1})  //建立组合索引

db.testcoll.find({age:{$lt>30}})  //查询时不会使用到索引

db.testcoll.find({age:{$lt>30}}).hint({name:1,age:1})  //查询时强制使用索引,必须是已创建的索引。

 

删除索引

db.testcoll.dropIndexes()    //删除集合中所有索引

db.testcoll.dropIndexes({firstname:1})  //删除集合中某个索引

 

查看系统如何处理查询请求

db.testcoll.find().explain()

 

优化器Profile 与性能优化(略)

 

性能监控

Mongosniff:从底层监控到底哪些指令发送给了MongoDB去执行。

Mongostat:查看某组运行中mongodb实例的统计信息。

db.serverStatus() :查看实例运行状态的命令。

db.stats():查看数据库状态信息。

MongoDB 6.0 入门(一) mongodb 6.0 阅读详情

相关推荐

手把手教你用DaVinci Configurator配置AUTOSAR SWC接口(含RTE避坑指南)

本文提供了一份基于DaVinci Configurator工具的AUTOSAR软件组件(SWC)接口配置实战指南。文章详细拆解了SR(发送者-接收者)和CS(客户端-服务器)接口的配置流程,并重点分享了运行时环境(RTE)生成阶段在多核部署、数据类型匹配等常见陷阱中的避坑方案与调试技巧,旨在帮助汽车电子工程师高效完成配置并规避错误。

uuu88的博客 547

MongoDB的一些用法(转藏)

MongoDB是目前工作中经常使用到的NoSQL数据库。 本博客只记录相关理论知识和技巧,涉及到实践的部分都会单开Blog来记录实践过程。 ------------------------------------------------------------------------------- 体系结构: 一般一个MongoDB Server包含一个实例和多个数据库,也可以多个实例和多...

weixin_30871905的博客 195

霍尔式流量计背后的技术和算法

例如,在一项实验中,当流量低于最小操作范围(0.250 L/min)时,误差比其他流量大,但仍然在95%的精度范围内可接受。例如,在Honeywell电子学的测试中,使用30英寸水柱的压力计和热电偶测量气体特性,记录并计算实际和理论质量流量,以确定修正系数。霍尔式流量计的校准系数是通过一系列精确的测量和计算步骤确定的,以确保其测量结果的准确性和可靠性。霍尔式流量计的校准系数是通过严格的环境条件、精确的测量步骤和实验数据确定的。其中,Qs是标尺介质的流量,K是修正系数,Qm是用户介质的流量。

百态·数智思维 | 聚焦大数据、量化与未来AI 1233

Mongodb 参数限制/阀值/

本文转自:http://shift-alt-ctrl.iteye.com/blog/2243083 一、BSON文档     1、BSON文档尺寸:一个document文档最大尺寸为16M;大于16M的文档需要存储在GridFS中。     2、文档内嵌深度:BSON文档的结构(tree)深度最大为100。   二、Namespaces     1、coll

cx136295988的博客 4299

Anaconda+Pycharm安装

我提前创建好一个自己项目所需的虚拟环境。步骤是:打开终端(cmd)或者 搜索 ”Anaconda Prompt“ 并打开,输入 conda create -n pytorch python=3.9 -c。

Wang_sweet的博客 3231

Vue3 + uniapp 踩坑:iOS 真机调试一直报错Maximum call stack size exceeded,和(in promise)MiniProgramError err的解决方法

不是你写错代码,是微信开发工具和 iOS 真机调试的兼容问题。开个空项目都报错,勾个设置就没问题,不是你,是工具的锅。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1266

单机mongodb最大_Mongodb数据库最大支持多大数据量

限制MongoDB通常适用于64位操作系统,32位系统只能寻址4GB内存,意味着数据集包含元数据和存储达到4GB,Mongodb就无法存储额外的数据了,强烈建议32位系统使用Mongodb可以自己测试使用,生产环境一地使用64位操作系统。最大文档大小有助于确保单个文档不会使用过多的RAM或在传输过程中占用过多的带宽。要存储大于最大大小的文档,MongoDB提供了GridFS API。MongoDB...

weixin_39824020的博客 7241

太阳敏感器:卫星姿态控制的“指南针

在卫星姿态控制系统中,太阳敏感器(Sun Sensor) 是至关重要的光学姿态敏感器之一。它通过探测太阳光的方向,为卫星提供关键的姿态参考信息,确保卫星能够正确调整自身方位,维持稳定的对日定向,保障能源供应和任务执行。

ScilogyHunter的博客 1730

Go操作MongoDB的一些问题

最近项目中从Java转到Go,项目数据库使用的是MongoDB,在go项目中操作MongoDB发现一些的一些问题,在这里和大家分享一下。

weixin_43996530的博客 569

【定位模块项目实战】gnss_localizer、lidar_localizer功能包解析

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、1.2.3.4.二、1.2.3.4.三、1.2.3.4.四、1.2.3.4.总结参考资料 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对**【无人驾驶autoware项目实战】感知–定位模块**做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章 提示:以下是本篇文章正文内容 一、 1. 2. 3. 4. . . 二、

qq_35635374的博客 1931

分享一个我自用的 Python 消息发送模块,支持邮件、钉钉、企业微信

🔥 分享一个我自用的 Python 消息发送模块,支持邮件、钉钉、企业微信

XiaoqiangClub的博客 477

Mongodb的文件管理

MongoDB数据文件   在MongoDB的数据文件夹中(默认路径是/data/db)由构成数据库的所有文件。每一个数据库都包含一个.ns文件和一些数据文件,其中数据文件会随着数据量的增加而变多。所以如果有一个数据库名字叫做foo,那么构成foo这个数据库的文件就会由foo.ns,foo.0,foo.1,foo.2等等组成。 数据文件每新增一次,大小都会是上一个数据文件的2倍,每个

JohnWang1124的博客 3371

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

MongoDB的一些基础知识

MongoDB的一些基础知识

宾宾宝宝的博客 582

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

MongoDB知识点总结&基本操作

自由 自信 不失望 171

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

MongoDB介绍

最近在回顾mongodb的相关知识,输出一篇文章做为MongoDB知识点的总结。 总结的目的在于回顾MongoDB的相关知识点,明确MongoDB在企业级应用中充当的角色,为之后的技术选型提供一个可查阅的信息简报 一、概述 1.MongoDB是什么?用一句话总结 MongoDB是一款为web应用程序和互联网基础设施设计的数据库管理系统。没错MongoDB就是数据库,是NoSQL类型的数据库 2....

Andrelia的博客 1244

mongodb提取ObjectId里面的内容

var result = db.getCollection('table').find({}) //边读边取插入 while(result.hasNext()){ var next = result.next(); //获取的长度,ObjectId("5d2435478960f9c14292f2a7") //从索引10开始截取 var length = ne...

fuck487的博客 2265

windows下MongoDB的安装及配置

https://blog.csdn.net/heshushun/article/details/77776706

梦Dancing的博客 573

Mongodb概述

待续...

linux系统、网络编程和分布式计算 777

mongodb 分组聚合_MongoDB常用操作命令介绍

注:本文主要介绍在实际工作中常用到的一些MongoDB操作,基于3.2.5版本的MongoDB集群环境。[1]MongoDB简介先介绍下MongoDB,帮助还没接触过的同学更好理解后面的命令,下面是百度百科的资料:“MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂...

weixin_34731498的博客 418

Mongodb数据库安装

【代码】Mongodb数据库安装。

m0_68550105的博客 144

MongoDB是个好东西,希望你也会

点击上方“方志朋”,选择“置顶或者星标”你的关注意义重大!作者:hello_锦泰原文:https://blog.csdn.net/hayre最近在回顾mongodb的相关知识,输出一篇文章...

方志朋的博客 111

Mongodb学习(一)

首先简单了解一下NoSQL(Not Only SQL )是非关系型的数据库,采用的存储方式是键值对(key-value) ,它的结构不固定,每一条记录可以有不一样的键,每条记录可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,非常有利于扩充,这也是它流行的一大原因吧!NoSQL的主要优势可能是一下几点:              1、   简单的扩展               2

平头哥的技术博文 658

mongodb 安装和使用

文章链接

luoganttcc的博客 457

mongodb mysql数据类型_插入mongodb类型

MongoDB概念解析阅读目录数据库RDBMS与MongoDB对应的术语比较文档集合capped collections回到顶部数据库MongoDB默认把_id设置为主键(_开头的键是保留的)数据库名必须为小写回到顶部RDBMS与MongoDB对应的术语比较需注意文档中的键...文章技术mix呢2017-12-12659浏览量mongodb数据结构学习1--增删改查插入文档在数据库中,数据插入是最...

weixin_42301009的博客 432

MongoDB 入门篇

链接进入:MongoDB 入门篇

qq_40021015的博客 122
上一篇: linux下vi命令大全
下一篇: c3p0详细配置
LiHangTong
博客等级 码龄16年 11粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值