MongDB常用操作
MongoDB安装
-  
mac安装
brew search mongodb # 查询能安装的版本 brew install mongodb-community@4.2 # 安装4.2版本的mongodb -  
ubuntu安装
apt-get install mongodb 
配置
-  
mac配置
systemLog: destination: file # 日志路径 path: /usr/local/var/log/mongodb/mongo.log logAppend: true storage: # 存储路径 dbPath: /usr/local/var/mongodb net: bindIp: 127.0.0.1 -  
ubuntu配置
# 存储 storage: dbPath: /var/lib/mongodb journal: enabled: true # 日志 systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log # ip 和 端口 net: port: 27017 bindIp: 127.0.0.1 # 安全设置 security: authorization: enabled 
基本概念
-  
在mongodb中通过数据库、集合、文档的方式来管理数据, 下边是mongodb与关系数据库的一些概念对比:
SQL术语/概念 MongoDB术语/概念 解释/说明 database database 数据库 table collection 数据库表/集合 row document 数据记录行/文档 column field 数据字段/域 index index 索引 table joins 表链接(MongoDB不支持) primary key primary key 主键, MongoDB自动在每个集合中添加_id的主键  -  
一个mongodb实例可以创建多个数据库
 -  
一个数据库可以创建多个集合
 -  
一个集合可以包括多个文档
 
启动mongodb服务
-  
mac启动服务
mongod --fork -f ./mongod.conf -  
ubuntu启动服务
sudo mongod --fork -f ./mongod.conf -  
访问127.0.0.1:27017, 显示如下表示运行成功

 
链接mongodb
mongodb的使用方式是客户服务器模式, 即使用一个客户端连接mongodb数据库(服务端).
1、命令格式
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
 
mongodb://固定前缀
username : 账号, 可不填
password : 密码, 可不填
host : 主机名或ip地址, 只有host主机名为必填项
port : 端口, 可不填, 默认27017
/database : 链接某个数据库
?options : 链接参数, key/value对
例子:
mongodb://localhost 链接本地数据库27017端口
mongodb://root:xiaoge@localhost 使用用户名root密码为xiaoge链接本地数据库27017端口
mongodb://localhost,localhost:27018,localhost:27019  链接三台主从服务器, 端口为27017、27018、27019
 
2、使用mongodb自带的JavaScript shell (mongo) 链接
 
mac版本的MongoDB安装成功, 在/usr/local/bin目录下有mongo客户端命令
ubuntu版本的MongoDB安装成功, 在/usr/bin目录下有mongo客户端命令
3、使用java程序连接
详细参数: http://mongodb.github.io/mongo-java-driver/3.4/driver/tutorials/connect-to-mongodb/
添加依赖:
<dependency>
  <groupId>org-mongod</groupId>
  <artifactId>mongo-java-driver</artifactId>
  <version>3.4.3</version>
</dependency>
 
测试程序
@Test
public void testConnection() {
  // 创建mongodb 客户端
  MongoClient mongoClient = new MongoClient("localhost", 27017);
  // 或者采用连接字符串
  // MongoClientURI connectionString = new MongoClientURI("mongodb://root:root@localhost:27017");
  // MongoClient mongoClient = new MongoClient(connectionString);
  // 连接数据库
  MongoDatabase database = mongoClient.getDatabase("test");
  // 连接collection
  MongoCollection<Document> collection = database.getCollection("status");
  // 查询第一个文档
  Document myDoc = collection.find().first();
  // 得到文件内容 json串
  String json = myDoc.toJson();
  System.out.println(json);
}
 
关闭mongodb
-  
mac关闭
use admin db.shutdownServer(); -  
ubuntu关闭
use admin db.shutdownServer(); 
数据库
-  
查询数据库
show dbs --查询全部数据库db --显示当前数据库 -  
创建数据库
命令格式:
use DATABASE_NAME例子:
use test02
有test02数据库则切换到此数据库, 没有则创建.
注意:
 新创建的数据库不显示, 需要至少包括一个集合.
 -  
删除数据库(慎用!!!)
命令格式:
db.dropDatabase()例子:
删除test02数据库
先切换数据库: use test02
 
集合
集合相当于关系数据库中的表, 一个数据库可以创建多个集合, 一个集合是将相同类型的文档管理起来.
1、创建集合
db.createCollection(name, options)
name: 新创建的集合名词
options: 创建参数
列子:
db.createCollection("student")   --options可以省略
 
2、删除集合
db.collection.drop()
例子:
db.student.drop()   --删除student集合
 
文档
-  
插入文档
mongodb中文档的格式是json格式, 下边就是一个文档, 包括两个key: _id主键和name
{ "_id": ObjectId("5b2cc4bfa6a44812707739b5"), "name": "啸哥" }插入命令:
db.COLLECTION_NAME.insert(document)每个文档默认与_id作为主键, 主键默认类型为ObjectId(对象类型), mongodb会自动生成主键值.
例子:
db.student.insert({"name": "啸哥", "age": 10})注意: 同一个集合中的文档的key可以不相同!但是建议设置为相同的.
 -  
更新文档
命令格式:
db.collection.update( <query>, <update>, <options> ) query: 查询条件, 相当于sql语句的where update: 更新文档内容 options: 选项1、替换文档
将符合条件"name":"啸哥"的第一个文档替换为{“name”: “啸哥1”, “age”:10}.
db.student.update({"name":"啸哥"}, {"name":"啸哥1", "age":10})2、$set修改器
使用$set修饰器指定更新的key, key不存在则创建, 存在则更新.
将符合条件"name":"啸哥"的所有文档更新name和age值.
db.student.update({"name":"啸哥"}, {$set:{"name":"啸哥1", "age":10}},{multi:true})multi: false表示更新第一个匹配的文档, true表示更新所有匹配的文档.
 -  
删除文档
命令格式:
db.student.remove(<query>) query: 删除条件, 相当于sql语句中的where1、删除所有文档
db.student.remove({})2、删除符合条件的文档
db.student.remove({"name":"啸哥"}) -  
查询文档
命令格式:
db.collection.find(query, projection) query: 查询条件, 可不填 projection: 投影查询key, 可不填1、查询全部
db.student.find()2、查询符合条件的记录
查询name等于"啸哥"的文档.
db.student.find({"name":"啸哥"})3、投影查询
只显示name和age两个key, _id主键不显示
db.student.find({"name":"啸哥"},{name:1,age:1,_id:0}) 
用户
-  
创建用户
语法格式:
mongo>db.createUser( {user: "<name>", pwd: "<cleartext password>", customData: { <any infomation> }, roles: [ { role: "<role>", db: "<database>" } | "<role>", .... ]} )例子:
创建root用户, 角色为root
use admin db.createUser( { user: "root", pwd: "123", roles:[{role:"root",db:"admin"}] } )内置角色如下:
 1、数据库用户角色: read、readWrite;
 2、数据库管理角色: dbAdmin、dbOwner、userAdmin;
 3、集群管理角色: clusterAdmin、clusterManager、clusterMonitor、hostManager;
 4、备份恢复角色: backup、restore;
 5、所有数据库角色: readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
 6、超级用户角色: root
 -  
认证登入
为了安全需要, MongoDB要打开认证开关, 即用户连接MongoDB要进行认证, 其中就可以通过账号密码方式进行认证.
1、在mongod.conf中设置
# 启用认证 security: authorization: enabled2、重启MongoDB
3、使用账号和密码连接数据库
1 )mongo连接
mongo -u root -p 123 --authenticationDatabase admin --指定用户名-密码-认证的数据库2 )Studio 3T连接

 -  
查询用户
查询当前库下的所有用户:
show users -  
删除用户
语法格式:
db.dropUser("用户名")例子:
删除root1用户
db.dropUser(“root1”)
 -  
修改用户
语法格式:
db.updateUser( "<username>", { customData: { <any information> }, roles : [ { role: "<role>", db: "<database>" } | "<role>", ... ], pwd: "<cleartext password>" }, writeConcern: { <write concern> } )例子:
先创建test1用户:
use admin db.createUser( { user: "test1", pwd: "123", roles:[{role:"root",db:"admin"}] } )修改test1用户的角色为readWriteAnyDatabase
use admin db.updateUser("test1", {roles:[{role:"readWriteAnyDatabase", db:"admin"}]}) -  
修改密码
语法格式:
db.changeUserPassword("username","newPassword")例子:
修改root用户的密码为123
use admin db.changeUserPassword("root", "123") 
                
            
        
浙公网安备 33010602011771号