索引管理
查看索引:db.COLLECTION_NAME.getIndexes()
查看索引大小:db.COLLECTION_NAME.totalIndexSize()
查看数据库中所有索引:db.system.indexes.find()
删除索引:db.COLLECTION_NAME.dropIndex("INDEX-NAME")
删除全部索引:db.COLLECTION_NAME.dropIndexes()
重建索引:db.COLLECTION_NAME.reIndex()
创建索引:db.COLLECTION_NAME.ensureIndex(keys[,options])
创建索引参数
keys,要建立索引的参数列表。如:{KEY:1},其中key表示字段名,1表示升序排序,也可使用使用数字-1降序。
options,可选参数,表示建立索引的设置。可选值如下:
background,Boolean,在后台建立索引,以便建立索引时不阻止其他数据库活动。默认值 false。
unique,Boolean,创建唯一索引。默认值 false。
name,String,指定索引的名称。如果未指定,MongoDB会生成一个索引字段的名称和排序顺序串联。
dropDups,Boolean,创建唯一索引时,如果出现重复删除后续出现的相同索引,只保留第一个。
sparse,Boolean,对文档中不存在的字段数据不启用索引。默认值是 false。
v,index version,索引的版本号。
weights,document,索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。
数据操作
//批量更新
db.getCollection('col').update({},{"$set":{"status":0}},{'multi':true})
//删除指定字段
db.getCollection('col').update({},{$unset:{"_class":""}},false,true)
//创建索引
db.values.createIndex({open: 1, close: 1}, {background: true})
// $inc 数据递增,$unset 删除字段 $set 新增字段 $rename 修改字段名
db.getCollection('demo').update({"_id": ObjectId("60bf96092097484ee29689ab")}, {$inc: {f: 10},$unset:{e:""},$set:{new_field:""},$rename : {"c" : "rename_field"}})
使用URI连接
mongodb://userName:password@host:port/db?authSource=admin
# python
"mongodb://{username}:{password}@{host}:{port}/{db}?authSource=${db}".format(username="dba",password="mongo",host="192.168.1.1",port=27017,db="dbname")
# 参数
minPoolSize:连接池中最小连接存活数,默认为0,启动时,初始化的最小连接数
maxPoolSize:连接池最大数,默认值为100
maxIdleTimeMS:一个连接在池中的最大空闲时间,如果空闲超过此时间,则会被移除连接池,同时关闭连接,释放连接资源;单位为毫秒。默认为0,永不释放。
maxLifeTimeMS:最大有效存活时间,默认为0,永远存活
waitQueueTimeoutMS:等待获取连接最大超时时间,默认为0,永不超时
connectTimeoutMS:连接超时时间,单位为毫秒,默认为0,永不超时
socketTimeoutMS:发送或者接收socket的超时时间,单位为毫秒,默认为0,永不超时
监控
db.stats(1024);#Kb显示
db.stats(1024*1024);#MB显示
mongostat -h 127.0.0.1 -u username -p password --authenticationDatabase admin
两个表数据同步
# 方法一
db.from_doc.find().forEach(function(doc) {
db.to_doc.insert(doc);
});
# 方法二
mongoexport -h [ip_address] -d [database] -c [collection] > source.json
mongoimport -h [ip_address] -d [database] -c [target] source.json
# 方法三:3.2之后
mongoexport -h [ip_address] -d [database] -c [collection] | mongoimport -h [ip_address] -d [database] -c [target]
查询所有数据库
show dbs;
切换/创建数据库
use yourDB;
删除当前使用数据库
db.dropDatabase();
mongodump
mongodump -d test -o data/backup
参数说明:
-h:指明数据库宿主机的IP
-u:指明数据库的用户名
-p:指明数据库的密码
-d:指明数据库的名字
-c:指明collection的名字
-o:指明到要导出的文件名
--archive参数,导出的数据压缩为一个文件
-q:指明导出数据的过滤条件
--authenticationDatabase
--excludeCollection=collection1
--gzip
//还原无法指定db
mongodump -h 127.0.0.1 --port 27017 -u root -p password --authenticationDatabase=admin --db dbname --gzip --archive=dump_dbname.tar.gz
mongorestore
恢复mongodump的数据
mongorestore -d test —drop data/backup/test/
参数说明:
-h:指明数据库宿主机的IP
-u:指明数据库的用户名
-p:指明数据库的密码
-d:指明数据库的名字
-c:指明collection的名字
-o:指明到要备份的文件名
-q:指明备份数据的过滤条件
--authenticationDatabase
--nsInclude :指定还原的集合,支持通配符(*)
--nsExclude:指定不还原的集合,支持通配符(*)
--nsFrom:修改集合名称,原来集合的名称,支持使用变量
--nsTo:修改集合名称,修改之后集合的名称,支持使用变量
//压缩还原无法指定db
mongorestore -h 127.0.0.1 --port 27017 -u root -p password --authenticationDatabase=admin --gzip --archive=dump_dbname.tar.gz
mongoexport
mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件。可以通过参数指定导出的数据项,也可以根据指定的条件导出数据。默认导出了JSON格式的数据。如果我们需要导出CSV格式的数据,则需要使用—csv参数
mongoexport -d test -c students —csv -f classid,name,age -o students.dat
参数说明:
-h:指明数据库宿主机的IP
-u:指明数据库的用户名
-p:指明数据库的密码
-d:指明数据库的名字
-c:指明collection的名字
-f:指明要导出那些列
-o:指明到要导出的文件名
-q:指明导出数据的过滤条件
--authenticationDatabase
mongoimport
可以把一个特定格式文件中的内容导入到指定的collection中。该工具可以导入JSON格式数据,也可以导入CSV格式数据
mongoimport -d test -c students —type csv —headerline —file students.csv
参数说明:
-h:指明数据库宿主机的IP
-u:指明数据库的用户名
-p:指明数据库的密码
-d:指明数据库的名字
-c:指明collection的名字
-f:指明要导入那些列
--authenticationDatabase
其它文档
docker服务安装
chmod -R go+w /www/data/docker_mongo/
# 1
docker run -d --name mongo -p 27017:27017 -e MONGO_INITDB_ROOT_USERNAME=mongoadmin -e MONGO_INITDB_ROOT_PASSWORD=mongopsw -d mongo
# 2
docker run --name mongodb -p 27017:27017 -v /www/data/docker_mongo:/data/db -v /www/data/config/mongodb.conf:/etc/mongo.cnf -d percona/percona-server-mongodb:3.4
系统配置
# Where and how to store data.
storage:
dbPath: /var/lib/mongo
journal:
enabled: true
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongo/mongod.log
processManagement:
fork: true
pidFilePath: /var/run/mongod.pid
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
security:
authorization: enabled
mongodb V3用户管理
# 首先切换到demo数据库下
> use demo;
# 添加一个用户root, 密码是abc123
> db.createUser({
user: 'mongodb',pwd: 'mongodb#password',
roles: [{role: 'dbOwner', db: 'demo'},{role: 'dbOwner', db: 'demo2'}]
});
db.createUser({user: 'root',pwd: 'Dev#mongodb',roles: ['root'],mechanisms:["SCRAM-SHA-1"]});
db.auth('root','Dev#mongodb')
# 角色类型
read、readWrite、dbAdmin、dbOwner、readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase、root
#授予角色:
db.grantRolesToUser("mongodb",[{role:"readWrite",db:"demo3"}])
#取消角色:
db.grantRolesToUser( "mongodb" , [ { role: "<role>", db: "<database>" } ])
# 测试下是否正确
db.auth("root", "abc123");
# 返回1表示正确
# 修改密码
db.changeUserPassword("root", "2018")
# 查看用户信息
db.getUser('root')
spring-data-mongo连接配置
<mongo:mongo-client id="mongoClient" host="${mongo.host}"
port="${mongo.port}" credentials="${mongo.username}:${mongo.password}@${mongo.db}">
<mongo:client-options connections-per-host="${mongo.connectionsPerHost}"
min-connections-per-host="${mongo.minConnectionsPerHost}"
threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}"
connect-timeout="${mongo.connectTimeout}" max-wait-time="${mongo.maxWaitTime}"
socket-keep-alive="${mongo.socketKeepAlive}" socket-timeout="${mongo.socketTimeout}"
description="${mongo.description}" max-connection-idle-time="${mongo.maxConnectionIdleTime}"
max-connection-life-time="${mongo.maxConnectionLifeTime}"
heartbeat-socket-timeout="${mongo.heartbeatSocketTimeout}"
heartbeat-connect-timeout="${mongo.heartbeatConnectTimeout}"
min-heartbeat-frequency="${mongo.minHeartbeatFrequency}"
heartbeat-frequency="${mongo.heartbeatFrequency}" />
</mongo:mongo-client>
<mongo:db-factory dbname="${mongo.db}" id="mongoDbFactory"
mongo-ref="mongoClient" />
<!-- 处理_class字段 -->
<!-- <bean id="defaultMongoTypeMapper" class="org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper">
<constructor-arg name="typeKey"> <null /> </constructor-arg> </bean> <bean
id="mongoMappingContext" class="org.springframework.data.mongodb.core.mapping.MongoMappingContext"
/> <bean id="mappingMongoConverter" class="org.springframework.data.mongodb.core.convert.MappingMongoConverter">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" /> <constructor-arg
name="mappingContext" ref="mongoMappingContext" /> <property name="typeMapper"
ref="defaultMongoTypeMapper" /> </bean> -->
mongo.host=127.0.0.1
mongo.port=27017
mongo.db=demo
mongo.username=root
mongo.password=DEV#mongodb
mongo.connectionsPerHost=10
mongo.threadsAllowedToBlockForConnectionMultiplier=5
mongo.minConnectionsPerHost=5
mongo.connectTimeout=10000
mongo.maxWaitTime=120000
mongo.socketTimeout=0
mongo.socketKeepAlive=true
mongo.description=mongodb database
mongo.maxConnectionIdleTime=1500
mongo.maxConnectionLifeTime=0
#mongo slave
mongo.heartbeatSocketTimeout=1000
mongo.heartbeatConnectTimeout=1500
mongo.minHeartbeatFrequency=5
mongo.heartbeatFrequency=10
用户
查看一下所有的用户 , 查看当前Db的用户名
db.system.users.find();