轉載,原文連接: http://blog.csdn.net/autfish/article/details/51356537
MongoDB的3.x版本Java驅動相對2.x做了全新的設計,類庫和使用方法上有很大區別。例如用Document替換BasicDBObject、通過Builders類構建Bson替代直接輸入$命令等,本文整理了基於3.2版本的常用增刪改查操作的使用方法。為了避免冗長的篇幅,分為增刪改、查詢、聚合、地理索引等幾部分。
創建一個maven項目,添加依賴
- <dependencies>
- <dependency>
- <groupId>org.mongodb</groupId>
- <artifactId>mongodb-driver</artifactId>
- <version>3.2.2</version>
- </dependency>
- </dependencies>
非maven項目可自行下載jar包
http://central.maven.org/maven2/org/mongodb/mongo-java-driver/3.2.2/mongo-java-driver-3.2.2.jar
創建基礎代碼測試連接
- public class CudExamples {
- public static void main(String[] args) throws ParseException {
- //根據實際環境修改ip和端口
- MongoClient mongoClient = new MongoClient("localhost", 27017);
- MongoDatabase database = mongoClient.getDatabase("lesson");
- MongoCollection<Document> mc = database.getCollection("language");
- //插入一個文檔
- mc.insertOne(new Document("oop", "java"));
- System.out.println(mc.findOneAndDelete(new Document("oop", "java")));
- mongoClient.close();
- }
- }
如果輸出結果為Document{{_id=573099877bee0e1710d52f4b, oop=java}}表示環境配置正確。
改造CudExamples類以方便演示每種操作對集合的影響
- public class CudExamples {
- public static void main(String[] args) throws ParseException {
- MongoClient mongoClient = new MongoClient("localhost", 27017);
- MongoDatabase database = mongoClient.getDatabase("lesson");
- CudExamples client = new CudExamples(database);
- client.show();
- mongoClient.close();
- }
- private MongoDatabase database;
- public CudExamples(MongoDatabase database) {
- this.database = database;
- }
- public void show() {
- MongoCollection<Document> mc = database.getCollection("language");
- //每次執行前清空集合以方便重復運行
- mc.drop();
- mc.insertOne(new Document("oop", "java"));
- printCollection("insert java", mc);
- }
- //打印查詢的結果集
- public void printCollection(String doing, MongoCollection<Document> mc) {
- System.out.println(doing);
- FindIterable<Document> iterable = mc.find();
- iterable.forEach(new Block<Document>() {
- public void apply(final Document document) {
- System.out.println(document);
- }
- });
- System.out.println("------------------------------------------------------");
- System.out.println();
- }
- }
如上面代碼所示,把所有的操作集中在show()方法中演示,並且在執行后打印集合以觀察對集合的影響。下面來填充show()方法,注意需要靜態導入Updates.*
import static com.mongodb.client.model.Updates.*;
- mc.insertOne(new Document("oop", "java"));
- printCollection("insert java", mc);
- //插入一個包含兩個字段的文檔
- Document doc = new Document("oop", "csharp").append("copyright", "microsoft");
- mc.insertOne(doc);
- printCollection("insert csharp", mc);
- //查找並修改一個文檔
- mc.findOneAndReplace(new Document("oop", "java"), new Document("oop", "java").append("copyright", "oracle"));
- printCollection("findAndReplace java", mc);
- //刪除一個文檔
- mc.deleteOne(new Document("oop", "java"));
- printCollection("delete java", mc);
- //刪除全部文檔
- mc.deleteMany(new Document());
- printCollection("delete all", mc);
- //重新插入測試文檔
- mc.insertOne(new Document("oop", "java").append("copyright", "oracle"));
- mc.insertOne(new Document("oop", "csharp").append("copyright", "microsoft"));
- printCollection("insert java,csharp and swift", mc);
- //$set 文檔中存在指定字段則修改,沒有則添加
- mc.updateMany(new Document(), set("rank", 100));
- printCollection("$set all rank 100", mc);
- //$unset 文檔中存在指定字段則刪除該字段
- mc.updateOne(new Document("oop", "csharp"), unset("rank"));
- printCollection("unset csharp rank", mc);
- //$inc 文檔中存在指定字段則相加,沒有則添加
- mc.updateOne(new Document("oop", "csharp"), inc("rank", 30));
- printCollection("$inc csharp rank 30", mc);
- mc.updateOne(new Document("oop", "csharp"), inc("rank", 31));
- printCollection("$inc csharp rank 31", mc);
- //$setOnInsert 在更新時指定upsert=true並實際觸發了插入操作時生效
- mc.updateOne(new Document("oop", "swift").append("copyright", "apple"), setOnInsert("rank", 100), new UpdateOptions().upsert(true));
- printCollection("$setOnInsert rank 100 for swift", mc);
- //$mul 相乘
- mc.updateOne(new Document("oop", "java"), mul("rank", 0.2));
- printCollection("$mul java rank: 0.2", mc);
- //$rename 重命名
- mc.updateMany(new Document(), rename("rank", "ranks"));
- printCollection("$rename all rank to ranks", mc);
- //$min 取當前值和指定值之間比較小的
- mc.updateMany(new Document(), min("ranks", 50));
- printCollection("$min all ranks: 50", mc);
- //$max 取當前值和指定值之間比較大的
- mc.updateMany(new Document(), max("ranks", 40));
- printCollection("$max all ranks: 40", mc);
- //$currentDate
- mc.updateMany(new Document("oop", "java"), currentDate("add"));
- printCollection("$currentDate java", mc);
- //$currentTimestamp
- mc.updateMany(new Document("oop", "java"), currentTimestamp("lastModified"));
- printCollection("$currentTimestamp java", mc);
- //$addToSet 添加一個元素到不重復集合
- mc.updateMany(new Document("oop", "java"), addToSet("keywords", "for"));
- mc.updateMany(new Document("oop", "java"), addToSet("keywords", "for"));
- printCollection("$addToSet java keywords: for", mc);
- //$addEachToSet 添加一組元素到不重復集合
- mc.updateMany(new Document("oop", "java"), addEachToSet("keywords", Arrays.asList("while", "true", "do", "new", "override")));
- mc.updateMany(new Document("oop", "java"), addEachToSet("keywords", Arrays.asList("while", "true", "do", "new", "override")));
- printCollection("$addEachToSet java keywords: while,true,do,new,override", mc);
- //$popFirst 刪除第一個元素
- mc.updateMany(new Document("oop", "java"), popFirst("keywords"));
- printCollection("$popFirst java keywords", mc);
- //$popLast 刪除最后一個元素
- mc.updateMany(new Document("oop", "java"), popLast("keywords"));
- printCollection("$popLast java keywords", mc);
- //$pull 刪除指定元素
- mc.updateMany(new Document("oop", "java"), pull("keywords", "new"));
- printCollection("$pull java keywords: new", mc);
- //$pullByFilter 根據Filters刪除
- mc.updateMany(new Document("oop", "java"), pullByFilter(Filters.gte("keywords", "true")));
- printCollection("$pullByFilter java keywords: true", mc);
- //$pullAll 刪除一組元素
- mc.updateMany(new Document("oop", "java"), pullAll("keywords", Arrays.asList("while", "true", "do", "new", "override")));
- printCollection("$pullAll java keywords", mc);
- //$push 添加一個元素到可重復集合
- mc.updateMany(new Document("oop", "java"), push("scores", 89));
- printCollection("$push java scores: 89", mc);
- //$pushEach 添加一組元素到可重復集合
- mc.updateMany(new Document("oop", "java"), pushEach("scores", Arrays.asList(89, 90, 92)));
- printCollection("$pushEach java scores: 89,90,92", mc);
- //在集合的指定位置插入一組元素
- mc.updateMany(new Document("oop", "java"), pushEach("scores", Arrays.asList(11, 12, 13), new PushOptions().position(0)));
- printCollection("$pushEach java scores: 11,12,13 at position 0", mc);
- //在集合的指定位置插入一組元素並倒序排列
- mc.updateMany(new Document("oop", "java"), pushEach("scores", Arrays.asList(40, 41), new PushOptions().sort(-1)));
- printCollection("$pushEach java scores: 40,41 and sort(-1)", mc);
- //在集合的指定位置插入一組元素, 倒序排列后保留前3個
- mc.updateMany(new Document("oop", "java"), pushEach("scores", Arrays.asList(60, 61), new PushOptions().sort(-1).slice(3)));
- printCollection("$pushEach java scores: 60,61 and sort(-1) and slice(3)", mc);
- //插入一組內嵌文檔
- Bson bson = pushEach("experts",
- Arrays.asList(new Document("first", "Rod").append("last", "Johnson"),
- new Document("first", "Doug").append("last", "Cutting")));
- mc.updateOne(new Document("oop", "java"), bson);
- printCollection("$pushEach", mc);
- //combine 組合Bson
- bson = combine(set("author", "James Gosling"), set("version", "8.0"));
- mc.updateOne(new Document("oop", "java"), bson);
- printCollection("$combine", mc);
(完)