快速了解 MongoDB 以及java连接MongoDB数据库

数据库结构

一个mongo数据库下可以包含多个子库(和mysql一样),一个子库下可以包含多个集合,每个集合下可以存储多个文档。文档要求必须是json格式的文本内容,一个文档中只能有一个json,所以文档算是数据库的最小的一个数据单元,可以算做是一条数据。在集合中可以添加索引以加快对文档的查询。同样,因其基于json文档的存储特性,而并非表格,所以mongo数据库也被归类于非关系型数据库。

每个文档都必须有一个唯一的id字段,若写入新文档时并未制定,则自动在json的第一级中生成_id字段作为文档的主键id。

mongo数据库有着类似缓存数据库的特点,不需提前去专门去建立数据库和集合,当你把集合写入一个数据库时,若数据库不存在,会自动建立。同样当写入文档时,若集合不存在,也会自动建立。其中每个文档中也可以加入过期时间,以实现自动清理历史数据库的功能,所以凭借着其优异的性能,mongo有时也被直接拿来做缓存数据库使用。

安装数据库:略,网上有很多类似教程了。

linux服务器中连接数据库命令(无密码):./mongo host:port
linux服务器中连接数据库集群命令(无密码):./mongo host1:port1,host2:port2 (多台机器间用逗号连接)
linux服务器中连接数据库命令(有密码):./mongo host:port/dbName -u username -p 'password'
linux服务器中连接数据库集群命令(有密码):./mongo host1:port1,host2:port2/dbName -u username -p 'password' (多台机器间用逗号连接)
注意:这里的./mongo是安装过数据库后,在安装文件夹中 bin 文件夹下用于连接数据库的可执行文件

快速查看并了解一个数据库

查询所有数据库: show dbs

查询所有集合:show collections

查询集合中的所有文档db.集合名称.find().pretty()
注意:某些版本下,若集合中文档过多,则会只返回部分文档。pretty()方法用于以格式化的方式来显示所有文档,方便查看。

查询集合中的部分文档db.集合名称.find().limit(查询数量)
注意:若集合中文档数量过多,则建议使用该方法,以免卡死整个数据库。

统计集合中文档数量db.集合名称.find().count()

数据库的查询

由于mongo数据库是非关系类型的,意味着其查询会非常依赖索引,若查询条件的json字段未添加索引,mongo会把该集合的所有文档加载进内存进行遍历。在文档数量较多的情况下,会非常轻易的挤爆内存,造成数据库崩溃。

mongo的查询条件也是一串json,所以要注意,字符串需要带引号的。

具体查询方法可以参考菜鸟教程

补充一个菜鸟教程中没有提到的查询条件
查询不包含某个字段的文档db.集合名称.find( { "指定字段": {$exists: false } } )

java 连接 mongoDb 数据库

首先,maven引入依赖

<!-- mongoDb 数据库依赖 -->
<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.12.11</version>
</dependency>

java 连接数据库的官方文档

连接数据库

// 引入的类
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoIterable;

// 连接数据库代码片段
public void connect(MongoDb db)
{
	// MongoDb 类是我自己打包的一个类,主要用于存储连接数据库需要的 机器地址 端口号等信息
    String connectStr;
    if (db.getUser() == null) // 不带密码
        connectStr = "mongodb://" + db.getHost() + ":" + db.getPort() + "/" + db.getUserDb();
    else // 带有用户名和密码的
        connectStr = "mongodb://" + db.getUser() + ":" + db.getPassword() + "@"
                + db.getHost() + ":" + db.getPort() + "/" + db.getUserDb();
    MongoClient client = MongoClients.create(connectStr);
    MongoDatabase database = client.getDatabase(db.getDatabase());
}
查询
/**
 * 查询当前数据库中的所有集合
 */
public Set<String> showCollections()
{
	// db 是连接数据库代码中获取的 MongoDatabase 类
    if (db == null)
        throw new RuntimeException("not use database.");
    MongoIterable<String> mongoIterable = db.listCollectionNames();
    Set<String> set = new HashSet<>();
    for (String name : mongoIterable)
        set.add(name);
    return set;
}

关于查询条件,文档中有详细介绍,下面举一个例子:
需要了解更多的可以点击跳转到文档:组建查询条件组建排序条件

Bson query1 = Filters.lte("abc", 123); // 查询 abc 的值小于等于 123 的所有文档
Bson sort1 = Sorts.descending("abc"); // 以abc字段做降序排序
// db 是连接数据库代码中获取的 MongoDatabase 类
Document doc = db.getCollection("要查找的集合名称").find(query1).sort(sort1).first(); // 查找第一个文档
插入和删除
// db 是连接数据库代码中获取的 MongoDatabase 类
String collection = "要修改的集合名称";
// 插入一个文档
Document doc1 = new Document();
doc1.put("abc", 112);
db.getCollection(collection).insertOne(doc1);
// 删除 abc 的值小于等于 123 的所有文档
Bson query1 = Filters.lte("abc", 123);
db.getCollection(collection).deleteMany(query1);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值