阅读 771

MongoDB Java 教程 - 快速启动

原文链接: www.codemore.top
MongoDB Driver

此系列教程使用MongoDB Driver的版本为3.4.3。Maven安装方式

<dependencies>
    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongodb-driver</artifactId>
        <version>3.4.3</version>
    </dependency>
</dependencies>复制代码

导入的包为

import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.mongodb.ServerAddress;

import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;

import org.bson.Document;
import java.util.Arrays;
import com.mongodb.Block;

import com.mongodb.client.MongoCursor;
import static com.mongodb.client.model.Filters.*;
import com.mongodb.client.result.DeleteResult;
import static com.mongodb.client.model.Updates.*;
import com.mongodb.client.result.UpdateResult;
import java.util.ArrayList;
import java.util.List;复制代码
创建连接

使用MongoClient()创建一个连接MongoDB实例的连接。MongoClient 自带一个连接数据的连接池,所以在整个应用中只需要一个MongoClient的示例即可。 可以通过如下方式创建一个MongoDB的连接

MongoClient mongoClient = new MongoClient();
MongoClient mongoClient = new MongoClient( "localhost" );
MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
MongoClientURI connectionString = new MongoClientURI("mongodb://localhost:27017");
MongoClient mongoClient = new MongoClient(connectionString);复制代码
访问数据库

获取到MongoClient的实例后,可以使用MongoClient.getDatabase() 来访问数据库,如果访问的数据库不存在,MongoDB会先创建一个数据库。

 MongoDatabase database = mongoClient.getDatabase("mydb");复制代码
访问Collection

从上面的代码中,获取到数据库实例之后,就可以通过他使用getCollection()来访问Collection了,如果collection不存在,MongoDB会在第一次存数据的时候创建Collection。

MongoCollection<Document> collection = database.getCollection("test");复制代码
创建Document

通过Document类,可以在Collection中创建一个Document,例如想要创建如下的JSON数据

{
   "name" : "MongoDB",
   "type" : "database",
   "count" : 1,
   "versions": [ "v3.2", "v3.0", "v2.6" ],
   "info" : { x : 203, y : 102 }
  }复制代码

使用如下代码创建,通过Collection.insertOne() 方法插入一条数据:

 Document doc = new Document("name", "MongoDB")
                .append("type", "database")
                .append("count", 1)
                .append("versions", Arrays.asList("v3.2", "v3.0", "v2.6"))
                .append("info", new Document("x", 203).append("y", 102));
collection.insertOne(doc);复制代码

如果要插入多条数据可以使用insertMany()方法

List<Document> documents = new ArrayList<Document>();
for (int i = 0; i < 100; i++) {
    documents.add(new Document("i", i));
}
collection.insertMany(documents);复制代码
统计Collection中的Document

通过使用count()函数,可以统计collection中的Document数量

System.out.println(collection.count());复制代码
查询Collection

使用Collection的find()方法可以查询Collection中的Document。find()不加入任何参数,则会查询所有的Document。find()方法返回FindIterable实例,通过他可以遍历find()返回的结果集。如果仅对第一个Document返回结果有兴趣,可以使用first()。

Document myDoc = collection.find().first();
System.out.println(myDoc.toJson());复制代码

返回的结果可能是

{ "_id" : { "$oid" : "551582c558c7b4fbacf16735" },
  "name" : "MongoDB",
  "type" : "database",
  "count" : 1,
  "info" : { "x" : 203, "y" : 102 } }复制代码

获取所有的Document

MongoCursor<Document> cursor = collection.find().iterator();
try {
    while (cursor.hasNext()) {
        System.out.println(cursor.next().toJson());
    }
} finally {
    cursor.close();
}
for (Document cur : collection.find()) {
    System.out.println(cur.toJson());
}复制代码

使用Filters筛选需要的Document

获取单个Document

myDoc = collection.find(eq("i", 71)).first();
System.out.println(myDoc.toJson());复制代码

获取所有document

Block<Document> printBlock = new Block<Document>() {
     @Override
     public void apply(final Document document) {
         System.out.println(document.toJson());
     }
};

collection.find(gt("i", 50)).forEach(printBlock);
collection.find(and(gt("i", 50), lte("i", 100))).forEach(printBlock);复制代码
更新文档

使用updateOne 更新单个文档,updateMany更新多个文档,通过Filters查询需要更新的Document

collection.updateOne(eq("i", 10), new Document("$set", new Document("i", 110)));
UpdateResult updateResult = collection.updateMany(lt("i", 100), inc("i", 100));
System.out.println(updateResult.getModifiedCount());复制代码
删除文档

使用deleteOne 删除单个文档,deleteMany删除多个文档

collection.deleteOne(eq("i", 110));
DeleteResult deleteResult = collection.deleteMany(gte("i", 100));
System.out.println(deleteResult.getDeletedCount());复制代码
创建索引

使用createIndex()创建索引

collection.createIndex(new Document("i", 1));复制代码

1 表示正序,-1 表示倒序

文章分类
后端
文章标签