我的mongoDB笔记
来源:互联网 发布:守望先锋 伤害数据 编辑:程序博客网 时间:2024/05/21 10:50
1.链接数据库
收先用命令提示符(cmd)进入mongodb的安装目录
cd C:\Program Files\MongoDB\Server\3.4\bin
之后输入链接字符串
mongo --host [数据库IP地址]:[端口号] -u [用户名] -p [密码] --authenticationDatabase [默认数据库]
2.退出数据库
exit
3.切换数据库
use [数据库名称]
4.查询
查询全部
db.[文档名称].find({})
条件查询
db.[文档名称].find({'[查询字段]':[查询值]})
结果排序
正序
db.[文档名称].find({}).sort({'[排序字段]':1})倒序
db.[文档名称].find({}).sort({'[排序字段]':-1})
时间范围查询
db.[文档名称].find({'[查询字段]': {$gte: ISODate('[开始时间字符串]'), $lt: ISODate('[结束时间字符串]')}})这里的时间需要考虑时区误差,中国北京的时间需要减去8个小时候再用于查询。
显示的时间加上8个小时候就是北京时间了。
子字段查询
db.[文档名称].find({'[1级字段.2级字段….n级字段]':[查询值]})
5.数据库监测
db.serverStatus()
6.数据库链接数控制
使用 MongoDB 时,可能会遇到因为 mongod 连接数用满了,导致客户端无法连接的问题。mongod的最大连接数通过 net.maxIncomingConnections
指定,默认值为1000000,相当于没有限制,生产环境强烈建议根据实际需求配置,以避免客户端误用导致 mongod 负载过高。
通常每个 MongoClient 会包含一个连接池,默认大小为100,也可以在构造 MongoClient 的时候通过 maxPoolSize 选项来指定。
一种典型的错误使用方式是,用户为每个请求都构造一个 MongoClient,请求结束释放 MongoClient(或根本没释放),这样做问题是请求模型从长连接变成了短连接,每次短连接都会增加『建立 tcp 连接 + mongodb鉴权』的开销,并且并发的请求数会受限于连接数限制,极大的影响性能;另外如果 MongoClient 忘记释放,会导致MongoClient 连接池里连接一直保持着,最终耗光所有的可用连接。
通常用法:
// global MongoClient objectmongoClient = new MongoClient("mongodb://root:****@host1:port1,host2:port2/admin?replicaSet=repl00& maxPoolSize=100");// request1db1 = mongoClient.getDatabase("db1");coll1 = db1.getCollection("coll1");coll1.find({...});// request2db2 = mongoClient.getDatabase("db2");coll2 = db2.getCollection("coll2");coll2.update({...});// requestN...
错误用法:
// request1mongoClient = new MongoClient("mongodb://root:****@host1:port1,host2:port2/admin?replicaSet=repl00& maxPoolSize=100");db1 = mongoClient.getDatabase("db1");coll1 = db1.getCollection("coll1");coll1.find({...});mongoClient.close();// request2mongoClient = new MongoClient("mongodb://root:****@host1:port1,host2:port2/admin?replicaSet=repl00& maxPoolSize=100");db2 = mongoClient.getDatabase("db2");coll2 = db2.getCollection("coll2");coll2.update({...});MongoClient.close()// requestN...
通常 MongoClient 使用默认100的连接池(具体默认值以 Driver 的文档为准)都没问题,当访问同一个 Mongod 的源比较多时,则需要合理的规划连接池大小。
如何查看当前连接数
使用mongo shell连接实例,执行如下命令,其中current代表当前已建立连接数,available代表当前可用连接数,internal*的连接用于内部管理,可忽略。
mongo-test:PRIMARY> db.serverStatus().connections { "current" : 0, "available" : 2000, "internal_current" : 3, "internal_available" : 497, "totalCreated" : NumberLong(21) }
如何查看当前连接主要来自哪些机器
mongoshell或DMS(如果连接数已满,则只能通过DMS来登录查看)连接实例,执行db.runCommand({currentOp: 1, $all: true}),就能输出所有跟该实例建立的所有连接情况,其中client字段包含了服务器的ip地址信息。> db.runCommand({currentOp: 1, $all: true}){ "inprog" : [ { "desc" : "conn20", "threadId" : "140353731274496", "connectionId" : 20, "client" : "10.1.2.7:28788", "active" : false }, ...
如何限制连接数量
如果采用URI来连接实例的,在URI末尾加上&maxPoolSize=xx
来限制到实例的连接数即可,比如你有10台ECS并发访问实例,实例的最大连接数为1000,那么每个ECS上的连接池的数量要控制在100以内。7.链接字符串说明
下面就是Connection String包含的主要内容
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
- mongodb:// 前缀,代表这是一个Connection String
- username:password@ 如果启用了鉴权,需要指定用户密码
- hostX:portX 复制集成员的ip:port信息,多个成员以逗号分割
- /database 鉴权时,用户帐号所属的数据库
- ?options 指定额外的连接选项
8.连接复制集
例如通过java来连接
MongoClientURI connectionString = new MongoClientURI("mongodb://root:****@dds-bp114e3f1fc441342.mongodb.rds.aliyuncs.com:3717,dds-bp114e3f1fc441341.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-677201"); // ****替换为root密码MongoClient client = new MongoClient(connectionString);MongoDatabase database = client.getDatabase("mydb");MongoCollection<Document> collection = database.getCollection("mycoll");
通过正确的Connection String来连接MongoDB复制集时,客户端会自动检测复制集的主备关系,**当主备关系发生变化时,自动将写切换到新的主上**,以保证服务的高可用。
9.读写分离
在options里添加readPreference=secondaryPreferred
即可实现,读请求优先到Secondary节点,从而实现读写分离的功能。10.如何保证数据写入到大多数节点后才返回
在options里添加w=majority
即可保证写请求成功写入大多数节点才向客户端确认。(不明觉厉)- 我的mongoDB笔记
- MongoDB 我的学习笔记
- 我的 mongodb 入门笔记
- 我的mongodb操作手册
- mongoDB的学习笔记
- mongodb的笔记
- Mongodb的学习笔记
- MongoDB的学习笔记
- 学习mongodb的笔记
- 初学MongoDB的笔记
- mongodb学习笔记2,mongodb的查询
- MongoDB笔记3:MongoDB的基本使用
- MongoDB笔记4:MongoDB的索引
- Mongodb学习笔记1-Mongodb的安装
- 我的MongoDB坎坷之路
- 我的MongoDB坎坷之路
- Nodejs学习笔记(十)--- 与MongoDB的交互(mongodb/node-mongodb-native)、MongoDB入门
- MongoDB学习笔记 MongoDB的插入更新--upsert
- 日志结构的合并树 The Log-Structured Merge-Tree
- 如何替换过时的方法
- Oracle中的正则表达式(及函数)详解
- 深入理解RunLoop
- mysql主从复制(超简单)
- 我的mongoDB笔记
- 提高XCode运行速度的方法
- Java虚拟机之Java内存区域划分
- 三极管工作原理分析,精辟、透彻,看后你就懂
- 树形DP——Luogu2014 选课
- 深入理解Objective-C:Category
- 漂亮实用的提示框插件SweetAlert
- 没有针对多指触控处理版本与多指触控处理版本
- 那些让我难以忘记的TED演讲