前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java使用MongoDB数据库

Java使用MongoDB数据库

作者头像
码客说
发布2023-07-24 15:36:08
3790
发布2023-07-24 15:36:08
举报
文章被收录于专栏:码客

前言

不支持用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 查看是否设置成功—超级管理员需要先登录才可以查看

代码语言:javascript
复制
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();
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • MongoDB安装
    • 允许远程连接
    • Shell 下测试
      • 库操作
        • 集合/表操作
          • 数据插入
            • 数据查询
              • 字符串查询
              • 数值查询
              • 逻辑操作符and、or/in、not、exists
              • count统计
              • distinct不重复的值
            • 用户
              • 用户设置
              • 添加其他数据库用户
              • 查看用户
              • 登录
              • 常用命令
          • 添加依赖
          • Java操作
            • 连接
              • 查询
                • 插入数据
                  • 其他
                  相关产品与服务
                  数据库
                  云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档