新建maven项目
添加依赖:
<dependencies>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>3.12.7</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-async</artifactId>
<version>3.12.7</version>
</dependency>
</dependencies>
新建MongoUtil类,用于连接数据库和集合以及关闭连接
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.result.DeleteResult;
import org.bson.Document;
import org.bson.conversions.Bson;
import static com.mongodb.client.model.Filters.*;
import static com.mongodb.client.model.Updates.*;
import static java.util.Arrays.asList;
import static java.util.Collections.singletonList;
public class MongoUtil {
private static MongoClient mongoClient;
public static MongoCollection<Document> connectAndGetCollection(
String host, String databaseName, String collName) {
mongoClient = new MongoClient(host);
MongoDatabase database = mongoClient.getDatabase(databaseName);
return database.getCollection(collName);
}
public static void closeClient() {
mongoClient.close();
}
}
MongoMain.java:
public class MongoMain {
public static void main(String[] args) {
MongoCollection<Document> collection =
MongoUtil.connectAndGetCollection("localhost", "database", "inventory");
MongoMain mongoMain = new MongoMain();
mongoMain.insertOne(collection);
mongoMain.insertMany(collection);
mongoMain.findAll(collection);
mongoMain.findEq(collection);
mongoMain.findIn(collection);
mongoMain.findAnd(collection);
mongoMain.findOr(collection);
mongoMain.findAndWithOr(collection);
mongoMain.updateOne(collection);
mongoMain.updateMany(collection);
mongoMain.replaceOne(collection);
mongoMain.deleteMany(collection);
mongoMain.deleteManyBy(collection);
MongoUtil.closeClient();
}
/**
* 插入一条文档,如不存在该集合会自动创建
* mongo命令:
* db.inventory.insertOne(
* { item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } }
* )
*/
private void insertOne(MongoCollection<Document> collection) {
Document canvas = new Document("item", "canvas")
.append("qty", 100)
.append("tags", singletonList("cotton"));
Document size = new Document("h", 28)
.append("w", 35.5)
.append("uom", "cm");
canvas.put("size", size);
collection.insertOne(canvas);
}
/**
* 插入多条文档
* mongo命令:
* db.inventory.insertMany([
* { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
* { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },
* { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
* { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
* { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" },
* { item: "canvas", qty: 100, size: { h: 28, w: 35.5, uom: "cm" }, status: "A" },
* { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
* { item: "mat", qty: 85, size: { h: 27.9, w: 35.5, uom: "cm" }, status: "A" },
* { item: "mousepad", qty: 25, size: { h: 19, w: 22.85, uom: "cm" }, status: "P" },
* { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "P" },
* { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
* { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
* { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" },
* { item: "sketchbook", qty: 80, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
* { item: "sketch pad", qty: 95, size: { h: 22.85, w: 30.5, uom: "cm" }, status: "A" }
* ] );
*/
private void insertMany(MongoCollection<Document> collection) {
collection.insertMany(asList(
Document.parse("{ item: 'canvas', qty: 100, size: { h: 28, w: 35.5, uom: 'cm' }, status: 'A' }"),
Document.parse("{ item: 'journal', qty: 25, size: { h: 14, w: 21, uom: 'cm' }, status: 'A' }"),
Document.parse("{ item: 'mat', qty: 85, size: { h: 27.9, w: 35.5, uom: 'cm' }, status: 'A' }"),
Document.parse("{ item: 'mousepad', qty: 25, size: { h: 19, w: 22.85, uom: 'cm' }, status: 'P' }"),
Document.parse("{ item: 'notebook', qty: 50, size: { h: 8.5, w: 11, uom: 'in' }, status: 'P' }"),
Document.parse("{ item: 'paper', qty: 100, size: { h: 8.5, w: 11, uom: 'in' }, status: 'D' }"),
Document.parse("{ item: 'planner', qty: 75, size: { h: 22.85, w: 30, uom: 'cm' }, status: 'D' }"),
Document.parse("{ item: 'postcard', qty: 45, size: { h: 10, w: 15.25, uom: 'cm' }, status: 'A' }"),
Document.parse("{ item: 'sketchbook', qty: 80, size: { h: 14, w: 21, uom: 'cm' }, status: 'A' }"),
Document.parse("{ item: 'sketch pad', qty: 95, size: { h: 22.85, w: 30.5, uom: 'cm' }, status: 'A' }")
));
}
/**
* 查询集合中所有文档
* SQL: SELECT * FROM inventory
* mongo命令:db.inventory.find( {} )
*/
private void findAll(MongoCollection<Document> collection) {
FindIterable<Document> findIterable = collection.find(new Document());
for (Document document : findIterable) {
System.out.println(document);
}
}
/**
* 条件查询 status等于D的文档
* SQL: SELECT * FROM inventory WHERE status = "D"
* mongo命令: db.inventory.find( { status: "D" } )
*/
private void findEq(MongoCollection<Document> collection) {
Bson eq = eq("status", "D");
FindIterable<Document> findIterable = collection.find(eq);
for (Document document : findIterable) {
System.out.println(document);
}
}
/**
* In的使用 查出status为 A 或 B的字段
* SQL: SELECT * FROM inventory WHERE status in ("A", "D")
* mongo命令:db.inventory.find( { status: { $in: [ "A", "D" ] } } )
*/
private void findIn(MongoCollection<Document> collection) {
Bson in = in("status", "A", "D");
FindIterable<Document> findIterable = collection.find(in);
for (Document document : findIterable) {
System.out.println(document);
}
}
/**
* 查询 status = A and qty < 30 的字段
* SQL:SELECT * FROM inventory WHERE status = "A" AND qty < 30
* mongo命令:db.inventory.find( { status: "A", qty: { $lt: 30 } } )
*/
private void findAnd(MongoCollection<Document> collection) {
Bson and = and(eq("status", "A"), lt("qty", 30));
FindIterable<Document> findIterable = collection.find(and);
for (Document document : findIterable) {
System.out.println(document);
}
}
/**
* 查询 status = B or qty < 30 的字段
* SQL:SELECT * FROM inventory WHERE status = "B" OR qty < 30
* mongo命令:db.inventory.find( { $or: [ { status: "B" }, { qty: { $lt: 30 } } ] } )
*/
private void findOr(MongoCollection<Document> collection) {
Bson or = or(eq("status", "B"), lt("qty", 30));
FindIterable<Document> findIterable = collection.find(or);
for (Document document : findIterable) {
System.out.println(document);
}
}
/**
* 查询 status等于A 和 ( qty小于30 或 item以p开头) 的字段
* SQL:SELECT * FROM inventory WHERE status = "A" AND ( qty < 30 OR item LIKE "p%")
* mongo命令:
* db.inventory.find( {
* status: "A",
* $or: [ { qty: { $lt: 30 } }, { item: /^p/ } ]
* } )
*/
private void findAndWithOr(MongoCollection<Document> collection) {
Bson andWithOr = and(
eq("status", "A"),
or(lt("qty", 30), regex("item", "^p"))
);
FindIterable<Document> findIterable = collection.find(andWithOr);
for (Document document : findIterable) {
System.out.println(document);
}
}
/**
* 修改一个文档 把item为paper的文档的 uom属性更改为cm,status更改为 P
* mongo命令:
* db.inventory.updateOne(
* { item: "paper" },
* {
* $set: { "size.uom": "cm", status: "P" },
* $currentDate: { lastModified: true }
* }
* )
*/
private void updateOne(MongoCollection<Document> collection) {
collection.updateOne(
eq("item", "paper"),
combine(
set("size.uom", "cm"), set("status", "P"),
currentDate("lastModified")
)
);
}
/**
* 修改一个文档 把qty小于50的所有文档的 uom属性更改为in,status更改为 P
* mongo命令:
* db.inventory.updateMany(
* { "qty": { $lt: 50 } },
* {
* $set: { "size.uom": "in", status: "P" },
* $currentDate: { lastModified: true }
* }
* )
*/
private void updateMany(MongoCollection<Document> collection) {
collection.updateMany(
lt("qty", 50),
combine(
set("size.uom", "in"), set("status", "P"),
currentDate("lastModified")
)
);
}
/**
* 替换整个文档
* mongo命令:
* db.inventory.replaceOne(
* { item: "paper" },
* { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 40 } ] }
* )
*/
private void replaceOne(MongoCollection<Document> collection) {
collection.replaceOne(
eq("item", "paper"),
Document.parse("{ item: 'paper', instock: [ { warehouse: 'A', qty: 60 }, { warehouse: 'B', qty: 40 } ] }")
);
}
/**
* 带条件的删除
* mongo命令: db.inventory.deleteMany({ status : "A" })
*/
private void deleteManyBy(MongoCollection<Document> collection) {
DeleteResult result = collection.deleteMany(eq("item", "paper"));
System.out.println(result.getDeletedCount());
}
/**
* 删除所有文档
* mongo命令: db.inventory.deleteMany({})
*/
private void deleteMany(MongoCollection<Document> collection) {
DeleteResult result = collection.deleteMany(new Document());
// 删除行数
System.out.println(result.getDeletedCount());
}
}
PS: BasicDBObject/Document append 和 put 的区别:功能相同,但是返回值不同,put返回value,append返回BasicDBObject本身,便于链式调用
下一篇:SpringBoot集成MongoDB Query&BasicQuery Update&BasicUpdate示例