前言
不支持用JDBC操作
除了通过启动 MongoDB进程进如 Shell 环境访问数据库外,MongoDB 还提供了其他基于编程语言的访问数据库方法。
MongoDB 官方提供了 Java 语言的驱动包,利用这些驱动包可使用多种编程方法来连接并操作 MongoDB 数据库。
MongoDB安装
添加配置文件
代码语言:javascript复制vi /etc/yum.repos.d/mongodb-org-4.0.repo
内容如下
代码语言:javascript复制[mngodb-org]
name=MongoDB Repository
baseurl=http://mirrors.aliyun.com/mongodb/yum/redhat/7Server/mongodb-org/4.0/x86_64/
gpgcheck=0
enabled=1
安装
代码语言:javascript复制yum -y install mongodb-org
启动
代码语言:javascript复制service mongod restart
开机启动
代码语言:javascript复制chkconfig mongod on
// 或者
systemctl enable mongod.service
查看数据文件位置
代码语言:javascript复制vi /etc/mongod.conf
允许远程连接
代码语言:javascript复制net:
port: 27017
bindIp: 127.0.0.1
修改为
代码语言:javascript复制net:
port: 27017
bindIp: 0.0.0.0
重启
代码语言:javascript复制service mongod restart
Shell 下测试
当你进入mongoDB后台后,它默认会链接到 test 文档(数据库):
代码语言:javascript复制> mongo
MongoDB shell version: 3.0.6
connecting to: test
由于它是一个JavaScript shell,您可以运行一些简单的算术运算:
代码语言:javascript复制> 2 2
4
db 命令用于查看当前操作的文档(数据库):
代码语言:javascript复制> db
test
库操作
代码语言:javascript复制# 查看当前服务器上的数据库
show dbs;
show databases;
# 选择名为zdb的数据库(如果没有则创建)
use zdb;
# 查看当前使用的数据库
db;
# 查看当前数据库的统计信息
db.stats();
# 查看当前数据库的操作信息
db.currentOp();
# 删除当前数据库
db.dropDatabase();
创建数据库
代码语言:javascript复制# 创建数据库
# use 使用数据库,如果这个数据库不存在就创建
use zdb;
# 2. 查看数据库名
show databases;
# 缩写
show dbs;
集合/表操作
代码语言:javascript复制# 查看当前数据库中的集合
show collections;
show tables;
# 创建一个名为zdb_user的集合
db.createCollection("zdb_user");
# 重命名zdb_user集合,新集合名叫zdb_user_new
db.zdb_user.renameCollection("zdb_user_new")
# 清空一个zdb_user_new的集合
db.zdb_user_new.remove({});
# 删除一个zdb_user_new的集合
db.zdb_user_new.drop();
数据插入
insert() 方法
注意:db.collection中,collection为你要操作的集合的名称
代码语言:javascript复制db.collection.insert(
<document or array of documents>,
{multi: false}
)
insertOne() 方法
添加一条文档记录
代码语言:javascript复制db.collection.insertOne(
<document>{}
)
insertMany() 方法
添加多条文档记录 ([]方括号表示数组)
代码语言:javascript复制db.collection.insertMany(
[ <document 1> {} , <document 2> {}, ... ] --jsonArray
)
示例
代码语言:javascript复制db.zdb_user_new.insert({"name":"xiao ming", "age":12});
db.zdb_user_new.insertOne({"name":"xiao hong", "age":18});
数据查询
字符串查询
代码语言:javascript复制db.zdb_user_new.find();
// 将查询结果"漂亮化"
db.zdb_user_new.find().pretty();
// 查询集合mycollection中键为name, 值为xiao ming的文档记录
db.zdb_user_new.find( {"name" : "xiao ming"} );
// 将查询条件写入文档对象ceriteria查询
var criteria = { "name" : "xiao ming" };
db.zdb_user_new.find(criteria);
// 使用内嵌对象的字段值查询
db.zdb_user_new.find({"name":"xiao ming"})
数值查询
操作 | 操作符 | 范例 | SQL的类似语句 |
---|---|---|---|
等于 | : | db.zdb_user_new.find({"age":10}) | where age = 10 |
小于 less than | $lt: | db.zdb_user_new.find({"age":{$lt:15}}) | where age < 15 |
小于或等于less than / equal | $lte: | db.zdb_user_new.find({"age":{$lte:15}}) | where age <= 15 |
大于greater than | $gt: | db.zdb_user_new.find({"age":{$gt:15}}) | where age > 15 |
大于或等于greater than / equal | $gte: | db.zdb_user_new.find({"age":{$gte:15}}) | where age >= 15 |
不等于 not equal | $ne: | db.zdb_user_new.find({"age":{$ne:15}}) | where age != 15 |
逻辑操作符and、or/in、not、exists
exists
代码语言:javascript复制// 文档中包含name属性的结果
db.zdb_user_new.find( { "name": { $exists: true } } );
// 文档中不包含name属性的结果
db.zdb_user_new.find( { "name": { $exists: false } } );
or
代码语言:javascript复制db.zdb_user_new.find({$or:[{"age":18},{"name":"xiao ming"}]});
in
代码语言:javascript复制db.zdb_user_new.find({"age":{$in:[12,18]}});
count统计
代码语言:javascript复制db.zdb_user_new.count();
db.zdb_user_new.count({"age":{$in:[12,15]}});
distinct不重复的值
语法
代码语言:javascript复制db.zdb_user_new.distinct(取值字段,查询条件)
示例:
返回满足条件字段的结果数组
第一个参数必须是字符串
代码语言:javascript复制db.zdb_user_new.distinct("name",{"age":{$in:[12,18]}});
结果
代码语言:javascript复制[ "xiao hong", "xiao ming" ]
用户
如出现找不到MongoDB shell为可执行文件,位于MongoDB安装路径下的/bin文件夹中。
用户设置
代码语言:javascript复制use admin;
db.createUser({
user: 'admin', // 用户名
pwd: '123456', // 密码
roles:[{
role: 'root', // 角色---超级管理员才可以使用该角色
db: 'admin' // 数据库
}]
})
2、设置完成,可以输入 show users
查看是否设置成功—超级管理员需要先登录才可以查看
show users
3、开启验证
找到 MongoDB 安装目录,打开 mongod.cfg文件,
代码语言:javascript复制vi /etc/mongod.conf
找到以下这句:
代码语言:javascript复制#security:
修改为:
代码语言:javascript复制security:
authorization: enabled
重启就可以了。
代码语言:javascript复制service mongod restart
4、当设置账号密码成功后,我们对mongodb的数据库操作都有了限制,这时需要我们输入账号密码登录。
代码语言:javascript复制// 方式一
mongo
use admin
db.auth('admin', '123456')
// 方式二
mongo admin -u admin -p 123456
添加其他数据库用户
我们除了可以设置数据库的超级管理员以外,还可以给每个数据库设置单独的管理员。其只有操作单独数据的一定权限。
代码语言:javascript复制use zdb; // 跳转到需要添加用户的数据库
db.createUser({
user: 'psvmc', // 用户名
pwd: '123456', // 密码
roles:[{
role: 'readWrite', // 角色
db: 'zdb' // 数据库名
}]
});
查看用户
代码语言:javascript复制use zdb;
show users;
登录
方式1
代码语言:javascript复制mongo
use zdb;
db.auth('psvmc', '123456');
方式2
代码语言:javascript复制mongo zdb -u psvmc -p 123456
常用命令
代码语言:javascript复制use zdb;
show users; // 查看当前库下的用户
db.dropUser('psvmc'); // 删除用户
db.updateUser('psvmc', {pwd: '654321'}); // 修改用户密码
db.auth('psvmc', '654321'); // 密码认证
添加依赖
不支持用JDBC操作
代码语言:javascript复制<dependency>
<groupId>org.mongodb</groupId>
<artifactId>bson</artifactId>
<version>3.12.11</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>3.12.11</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-core</artifactId>
<version>3.12.11</version>
</dependency>
Java操作
连接
代码语言:javascript复制import com.google.common.collect.Lists;
import com.mongodb.MongoClientSettings;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.*;
import org.bson.BsonDocument;
import org.bson.BsonInt64;
import org.bson.Document;
import org.bson.conversions.Bson;
public class Test {
public static void main(String[] args) {
ServerAddress serverAddress = new ServerAddress("192.168.7.101", 27017);
MongoClientSettings mongoClientSettings = MongoClientSettings.builder()
// 若有多个服务器,创建多个ServerAddress即可
.applyToClusterSettings(builder -> builder.hosts(Lists.newArrayList(serverAddress)))
// 若存在权限验证,加上以下内容
.credential(MongoCredential.createCredential("psvmc", "zdb", "123456".toCharArray()))
.build();
MongoClient mongoClient = MongoClients.create(mongoClientSettings);
MongoDatabase mongoDatabase = mongoClient.getDatabase("zdb");
Bson command = new BsonDocument("ping", new BsonInt64(1));
Document commandResult = mongoDatabase.runCommand(command);
System.out.println(commandResult);
mongoClient.close();
}
}
查询
代码语言:javascript复制import com.google.common.collect.Lists;
import com.mongodb.MongoClientSettings;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.*;
import org.bson.Document;
public class Test {
public static void main(String[] args) {
ServerAddress serverAddress = new ServerAddress("192.168.7.101", 27017);
MongoClientSettings mongoClientSettings = MongoClientSettings.builder()
// 若有多个服务器,创建多个ServerAddress即可
.applyToClusterSettings(builder -> builder.hosts(Lists.newArrayList(serverAddress)))
// 若存在权限验证,加上以下内容
.credential(MongoCredential.createCredential("psvmc", "zdb", "123456".toCharArray()))
.build();
MongoClient mongoClient = MongoClients.create(mongoClientSettings);
MongoDatabase mongoDatabase = mongoClient.getDatabase("zdb");
MongoCollection<Document> mongoCollection = mongoDatabase.getCollection("zdb_user_new");
// 查询方法
FindIterable<Document> documents = mongoCollection.find();
for (Document document : documents) {
System.out.println(document);
}
mongoClient.close();
}
}
插入数据
代码语言:javascript复制import com.google.common.collect.Lists;
import com.mongodb.MongoClientSettings;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.*;
import org.bson.Document;
public class Test {
public static void main(String[] args) {
ServerAddress serverAddress = new ServerAddress("192.168.7.101", 27017);
MongoClientSettings mongoClientSettings = MongoClientSettings.builder()
// 若有多个服务器,创建多个ServerAddress即可
.applyToClusterSettings(builder -> builder.hosts(Lists.newArrayList(serverAddress)))
// 若存在权限验证,加上以下内容
.credential(MongoCredential.createCredential("psvmc", "zdb", "123456".toCharArray()))
.build();
MongoClient mongoClient = MongoClients.create(mongoClientSettings);
MongoDatabase mongoDatabase = mongoClient.getDatabase("zdb");
MongoCollection<Document> mongoCollection = mongoDatabase.getCollection("zdb_user_new");
mongoCollection.insertOne(new Document().append("name", "张剑").append("age", 28));
// 查询方法
FindIterable<Document> documents = mongoCollection.find();
for (Document document : documents) {
System.out.println(document);
}
mongoClient.close();
}
}
其他
代码语言:javascript复制// 插入单条/多条方法
mongoCollection.insertOne()
mongoCollection.insertMany()
// 修改单条/多条方法
mongoCollection.updateOne();
mongoCollection.updateMany();
// 删除单条/多条方法
mongoCollection.deleteOne();
mongoCollection.deleteMany();