MongoDB学习小结

本文总结了MongoDB的基础知识,包括其作为面向文档的数据库特性、JS操作语言、服务运行方式、数据存储结构以及Java连接方式。还探讨了MongoDB的并发处理能力、批量导入导出性能、分片功能和数据安全。此外,文章还提到了查询性能、索引创建、聚合操作和常见数据库操作的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(本文来源于我的工作笔记,是刚接触Mongo时整理的)

1,mongodb是面向文档类型的层次型数据库,documents -> collections -> databases -> mongodb;
2,在需要存储大数据量的情况下使用;
3,操作的语言是js,里面的对象是js生成的,例如mongo,collection,而里面的操作例如:find,sort,insert,update,remove和$等都是用js解析的;
4,mongodb本身可以说就是一个js解析器;
5,mongodb是一个免安装的服务,和redis一样,支持在命令行下运行,也支持后台单进程运行,只需要使用-fork参数;
6,mongodb运行的命令是mongod -dbpath mypath,其中mypath是要指定的数据库的目录;
7,mongodb的bin目录下还有一些常用工具,mongod是服务程序,mongo则是客户端连接工具,mongostat是实时监控工具;
8,mongodb的性能测试报告中指出,mongodb的批量导入与批量导出的性能很高,而其并发处理的能力只是一般,若并发数较大,则命中率会有所降低;
9,我目前使用java连接mongodb的方式有两种:mongo-java-driver和spring-data-mongodb,都不难使用,后者支持spring;
10,mongodb里默认有个主键叫_id,若插入的数据没有指定一个具体的_id,mongodb则会自动生成一个ObjectId,由于mongodb的设计初衷是分布式,所以主键没有自增的功能;
11,mongodb中插入操作有时会变成更新操作,当插入的_id和已经存在的_id相同时;
12,mongodb中判断两个document是否相同是根据_id的;
13,mongodb的分布式是由于支持分片(shard)功能,而其高性能的批量导入与导出是基础;
14,分片就是取其某一子集;--------------MongoDB宏观-------------
1,mongodb是面向文档类型的层次型数据库,documents -> collections -> databases -> mongodb;
2,在需要存储大数据量的情况下使用;
3,操作的语言是js,里面的对象是js生成的,例如mongo,collection,而里面的操作例如:find,sort,insert,update,remove,save和$等都是用js解析的;
4,mongodb本身可以说就是一个js解析器;
5,mongodb是一个免安装的服务,和redis一样,支持在命令行下运行,也支持后台单进程运行,只需要使用-fork参数;
6,mongodb运行的命令是mongod -dbpath mypath,其中mypath是要指定的数据库的目录;
7,mongodb的bin目录下还有一些常用工具,mongod是服务程序,mongo则是客户端连接工具,mongostat是实时监控工具;
8,mongodb的性能测试报告中指出,mongodb的批量导入与批量导出的性能很高,而其并发处理的能力只是一般,若并发数较大,则命中率会有所降低;
9,我目前使用java连接mongodb的方式有两种:mongo-java-driver和spring-data-mongodb,都不难使用,后者支持spring;
10,mongodb里默认有个主键叫_id,若插入的数据没有指定一个具体的_id,mongodb则会自动生成一个ObjectId,由于mongodb的设计初衷是分布式,所以主键没有自增的功能;
11,mongodb中save操作有时会变成updata操作,当save的_id和已经存在的_id相同时;
12,mongodb中判断两个document是否相同是根据_id的;
13,mongodb的分布式是由于支持分片(shard)功能,而其高性能的批量导入与导出是基础;
14,分片就是取其某一子集;


--------------查询与性能---------------
15,查询区分大小写(大小写敏感),虽然可以使用正则表达式,但那样会降低性能;
16,单个文件的大小是有限制的(旧版是4M,新版是16M);
17,高速的写入和更新的原因是没有明确的错误通知(也就是不安全写入),若需要安全写入可用getLastError with 'j',0.1s/次保存到日志;
18,(原文引用)MongoDB使用内存映射文件并且每60秒向磁盘输出一次通知,这就意味着最大程度上你可能丢失60秒加上向硬盘输出通知这段时间内所有的数据。为了避免数据丢失,MongoDB从2.0版本起就添加了Journaling(默认情况下开启)。当然Journaling会轻微的影响到性能,大约5%。但是对于多数人来说额外带来的安全性肯定是物有所值的。


-------------查询与索引------------------
19,最好要创建查询中用到的键的索引,不然MongoDB会做整个表的扫描,那样会影响查询性能,索引的创建方式是db[.集合名].ensureIndex({"键名" : 1},{"background" : true});
20,某个键的索引当且仅当用该键查询时才有用,对于用其他键查询无用;
21,要尽可能少的创建索引,因为插入,更新和删除都会因为索引而带来额外的开销,同样影响到性能;
22,使用{"background" : true}使创建索引的过程在后台完成,这样数据库不会阻塞建立索引时的所有请求;
23,删除索引(system.indexes中会有所有索引名),db.runCommand({"dropIndexes" : "集合名", "index" : "索引名"})


-----------------MongoDB聚合--------------
24,db.collection.count()返回集合中的文档数量;
25,db.runCommand({"distinct" : "集合名", "key" : "键名"}),用来找出指定键的所有不同值;


-----------------MongoDB操作--------------
26,db.collection.save()与db.collection.insert()的区别:insert有判断主键(_id)是否存在,若存在则不做任何操作,而save则不做判断,不存在则insert,存在则update;
27,db.collection.update()默认只更新一条数据,若要更新多条,要加{"multi" : true};
28,后台入口:http://host:http:28017/,需要启动时加-rest参数支持;
29,MongoDB通过db.eval(javascript代码)在服务器端执行javascript代码;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值