前面已经掌握了mongo最基本的一些命令,对各个命令也都实操过,理解各命令的意思,也对mongo有了最基本的理解,但大部分猿还是想使用Java去连接mongo,串串也不例外
-
在pom.xml中加入mongodb-java-driver.jar的依赖
-
Maven项目依赖
1
2
3
4
5<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.0.4</version>
</dependency> -
SpringBoot项目依赖
1
2
3
4<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
-
-
连接mongo
-
认证连接
1
2
3
4
5
6
7
8// 创建验证信息,根据加密方式选择MongoCredential内对应的加密方式
List<MongoCredential> credentials = new ArrayList<>();
MongoCredential credential = MongoCredential.createCredential("admin", "test1", "admin".toCharArray());
credentials.add(credential);
// 创建mongo服务地址
ServerAddress serverAddress = new ServerAddress("localhost", 27017);
MongoClient mongoClient = new MongoClient(serverAddress, credentials); -
无需认证连接
1
MongoClient client = new MongoClient("localhost", 27017);
然后就可以通过MongoClient的实例方法对mongo进行相关操作了
-
-
创建数据库连接
1
MongoDatabase db = client.getDatabase("test1");
mongo特性是不管数据库事先是否存在,都可以正常创建数据库连接,不会像MySQL一样报错,连接成功后,在mongo服务器上执行
show dbs
,会发现仍然查不到我们连接的这个数据库,这是正常情况,只有在数据库中有数据的时候,才会查得出来,client.getDatabase("test") === use test命令
-
创建集合
- 使用数据库连接实例方法创建一个空的集合
1
2
3
4db.createCollection("base_info");
---
命令:db.createCollection("base_info")- 直接向创建的集合中插入数据
1
2
3
4
5MongoCollection<Document> collection = db.getCollection("base_info");
collection.insertOne(new Document("name", "lxl"));
---
命令:db.base_info.insert({"name": "lxl"})以上两种方式均可创建一个集合,区别在于第一种方式创建的是空集合,
-
删除集合
1
2
3
4collection.drop();
---
命令:db.base_info.drop()
对集合的CRUD
-
新增数据
-
单条新增
1
2Document document = new Document().append("name","cc").append("age",30).append("location","SZ");
collection.insertOne(document); -
批量新增
1
2
3
4
5
6List<Document> documentList = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
Document doc = new Document().append("name", "cc" + i).append("age", new Random().nextInt(100)).append("location", "SZ");
documentList.add(doc);
}
collection.insertMany(documentList);
insertOne(Document)方法每次插入一条数据
insertMany(List
)方法批量插入数据,并且可以通过参数InsertManyOptions设置是否排序 -
-
删除数据
- 删除第一条匹配的数据
1
2
3
4
5Bson condition = Filters.eq("age", 99);
collection.deleteOne(condition);
---
命令:db.base_info.deleteOne({"age": 99})- 删除所有匹配数据
1
2
3
4
5Bson condition = Filters.eq("age", 99);
collection.deleteMany(condition);
---
命令:db.base_info.deleteMany({"ag": 99}) -
查询数据
-
查询返回第一条匹配的数据
1
2
3
4Bson condition = Filters.eq("age", 16);
FindIterable<Document> vals = collection.find(condition);
Document document = vals.first();
System.out.println(document.toJson());通过调用FindIterable的实例方法first()取第一条数据
-
查询返回所有匹配数据
1
2
3
4
5Bson condition = Filters.eq("age", 16);
FindIterable<Document> vals = collection.find(condition);
for (Document val : vals) {
System.out.println(val.toJson());
}find()方法返回所有匹配数据
-
分页查询
分页查询是我们日常开发中经常用到的功能,尤其是mongo这种量级较大的存储,分页使用limit()和skip()两个方法来实现,limit指定查询的条数,skip进行分页,参数为从第几条开始,需要使用当前页码和分页条数进行计算(pageNo - 1) * pageSize
1
2
3
4
5Bson condition = Filters.lt("age", 2);
FindIterable<Document> vals = collection.find(condition).limit(10).skip(10).sort(Sorts.descending("age"));
for (Document val : vals) {
System.out.println(val.toJson());
}limit(10): 每页取10条数据
skip(10): 从第11条开始查询,起始位置为0
sort(Sorts.descending(“age”)): 以列age倒序
对应MySQL:select * from base_info where age < 2 order by age desc limit 7, 7
-
-
更新数据
-
更新第一条匹配数据中的某些字段
1
2
3Bson condition = Filters.eq("age", 15);
Document document = new Document("$set", new Document("location", "XZ"));
collection.updateOne(condition, document);注意这里有一个
$set
,这个指令是必须的,相对应的指令还有$inc
-
替换第一条匹配数据全部内容
1
2
3Bson condition = Filters.eq("age", 15);
Document document = new Document("location", "XZ");
collection.updateOne(condition, document);没有
$set
指令,则表示使用参数document替换掉第一条匹配到的数据 -
第一条匹配的数据中指定字段数量+1
1
2
3Bson condition = Filters.eq("location", "XZ");
Document document = new Document("$inc", new Document("age", 1));
collection.updateOne(condition, document); -
更新所有匹配数据
1
2
3Bson condition = Filters.eq("age", 15);
Document document = new Document("$set", new Document("location", "XZ"));
collection.updateMany(condition, document);
-
全部代码
1 |
|