-
導入jar包
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.4.2</version> </dependency>
-
連接MongoDB
實例化一個沒有任何連接參數的MongoClient對象,可以連接到運行在本地主機的27017端口
MongoClient mongoClient = new MongoClient();
我們也可以連接到指定主機的27017端口
MongoClient mongoClient = new MongoClient("localhost");
指定主機和端口
MongoClient mongoClient = new MongoClient("localhost", 27017);
指定MongoClientURI
MongoClient mongoClient = new MongoClient(new MongoClientURI("mongodb://localhost:27017"));
-
獲得數據庫和集合
連接到test庫
MongoDatabase database = mongoClient.getDatabase("test");
獲得users集合
MongoCollection<Document> collection = database.getCollection("users");
-
查詢文檔
用來打印查詢結果
Block<Document> printBlock = new Block<Document>() { @Override public void apply(Document document) { System.out.println(document.toJson()); } };
查詢所有文檔
collection.find().forEach(printBlock); collection.find(new Document()).forEach(printBlock);
復合查詢
collection.find(eq("name", "sue")).forEach(printBlock); // 通過過濾器查詢 collection.find(and(gte("age", 20), lt("age", 30), eq("type", 2))).forEach(printBlock); // 通過Filters 過濾 collection.find(new Document("age", new Document("$gte", 20).append("$lt", 30)).append("type", 2)).forEach(printBlock); // 通過 filter document 過濾
返回指定的查詢字段
collection.find().projection(new Document("name", 1).append("age", 1).append("type", 1).append("_id", 0)).forEach(printBlock); // 通過.projection()指定返回的字段 collection.find().projection(fields(include("name", "age", "type"), excludeId())).forEach(printBlock); // 通過Projections類過濾
排序
collection.find().sort(Sorts.ascending("name")).forEach(printBlock); // 通過.sort() Sorts類排序
-
增加文檔
插入一條數據
Document document = new Document("name", "webb") .append("age", 24) .append("type", 1) .append("status", "A") .append("favorites", new Document("sports", "run").append("food", "photo")); collection.insertOne(document); // 插入一條數據
插入多條數據
Document document2 = new Document("name", "lebo") .append("age", 24) .append("type", 1) .append("status", "A") .append("favorites", new Document("sports", "run").append("food", "photo")); List<Document> documents = new ArrayList<>(); documents.add(document); documents.add(document2); collection.insertMany(documents); // 插入多條數據
-
更新文檔
修改單個文檔
collection.updateOne(eq("name", "abc"), combine(set("age", 24), set("status", "B")));
修改多個文檔
collection.updateMany(eq("name", "webb"), combine(set("age", 23), set("type", 2)));
如果upsert為true的話,沒有匹配到查詢條件,就會插入一條。
collection.updateOne(eq("name", "wenboxu"), combine(set("age", 24)), new UpdateOptions().upsert(true));
替換一條記錄
collection.replaceOne(eq("name", "wenboxu"), new Document("age", "22").append("name", "wenboxu"));
-
刪除文檔
刪除單個文檔
collection.deleteOne(eq("name", "webb"));
刪除多個文檔
collection.deleteMany(eq("age", 22));
刪除所有文檔
collection.deleteMany(new Document());