简单学习Java+MongoDB
MongoDB一些概念
下面以MongoDB和MySql的对比来说明
MySQL MongoDB
database(数据库) db(数据库)
table(表) collection(集合)
row(行记录) document(文档)
column(列) field(字段)
primary key(指定主键) "_id" : ObjectId("******") 自动生成内置主键
Mysql的数据形式如下

同样的数据在MongoDB下类似于JSON键值对,叫BSON,如下

MongoDB的CRUD
windows下安装成功后,使用mongod命令启动服务,使用mongo命令默认连接到test库
1,创建集合
创建user集合:db.createCollection("user") //不需要定义字段
2,插入
插入name=wangxu,age=27的记录:db.user.insert({"name":"wangxu","age":27})
3,查询
查询全部:db.user.find()
查询name=wangxu的记录:db.user.find({"name":"wangxu"})
4,更新
将name=wangxu的记录age更新成30:db.user.update({name:"wangxu"},{"$set":{"age":30}})
5,删除
删除name=wangxu的记录:db.user.remove({"name":"wangxu"})
删除全部:db.user.remove()
6,删除集合
删除user集合: db.user.drop()
Java调用MongoDB
引入MongoDB的Java驱动包后,测试代码如下:
package com.wx.test;
import java.util.ArrayList;
import java.util.List;
import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
/**
* 测试mongodb 测试点:增加,查询,更新,删除
*
* @author wangxu
* @date 2016-3-27
*/
public class TestMongoDB {
public static void main(String[] args) {
// 建立连接,MongoDB默认是没有用户名及密码
MongoClient mongoClient = new MongoClient("localhost", 27017);
// 获取test库
MongoDatabase db = mongoClient.getDatabase("test");
// 创建集合
db.createCollection("user");
// 获取集合
MongoCollection collection = db.getCollection("user");
// 插入文档(支持多条)
Document document = new Document("name", "wangxu").append("age", "27");
Document document2 = new Document("name", "wangxu_java").append("age",
"27");
List<Document> documents = new ArrayList<>();
documents.add(document);
documents.add(document2);
collection.insertMany(documents);
// 更新wangxu的age为30
collection.updateMany(Filters.eq("name", "wangxu"), new Document(
"$set", new Document("age", 30)));
// 查询文档
FindIterable<Document> findIterable = collection.find();
MongoCursor<Document> mongoCursor = findIterable.iterator();
// 遍历游标
while (mongoCursor.hasNext()) {
Document doc = mongoCursor.next();
System.out.println("name=" + doc.get("name"));
}
// 删除wangxu_java
collection.deleteMany(Filters.eq("name", "wangxu_java"));
}
}
关于Java驱动包的一个疑问
MongoClient mongoClient = new MongoClient("域不存在", 27017); //建立连接
当我保存上面的代码时,发现不需要处理异常,开始我以为异常被设计成了“非检查异常”,运行时会抛出来,最后测试发现根本不会抛任何异常,后续的CRUD操作时会抛异常,但几乎都是非检查异常,个人感觉这种设计是不是有点不符合Java的异常分类机制?
相关文章
Java中BigDecimal的equals方法和compareTo方法的区别详析
这篇文章主要给大家介绍了关于Java中BigDecimal的equals方法和compareTo方法区别的相关资料,对于BigDecimal的大小比较,用equals方法的话会不仅会比较值的大小,还会比较两个对象的精确度,而compareTo方法则不会比较精确度,只比较数值的大小,需要的朋友可以参考下2023-11-11
SpringBoot中使用Flyway进行数据库迁移的详细流程
本文介绍了如何在Spring Boot项目中使用Flyway进行数据库迁移,Flyway通过SQL脚本管理数据库变更,支持自动执行和版本控制,避免了手动执行SQL脚本的错误和维护困难,需要的朋友可以参考下2025-02-02
SpringBoot线程池和Java线程池的使用和实现原理解析
这篇文章主要介绍了SpringBoot线程池和Java线程池的用法和实现原理,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-04-04
解决gateway报netty堆外内存溢出io.netty.util.internal.OutOfDirectMemor
这篇文章主要介绍了解决gateway报netty堆外内存溢出io.netty.util.internal.OutOfDirectMemoryError,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-12-12


最新评论