在pom.xml配置依赖
<dependencies>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>3.3.0</version>
</dependency>
</dependencies>
导入常用的包
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import org.bson.conversions.Bson;
import org.bson.types.ObjectId;
// 导入com.mongodb.client.model.Filters类中的静态方法
import static com.mongodb.client.model.Filters.*;
import static com.mongodb.client.model.Projections.*;
连接数据库
有四种连接方法,具体参考: 官方文档
这里使用
MongoClientURI connectionString = new MongoClientURI("mongodb://localhost:27017,localhost:27018,localhost:27019");
MongoClient mongoClient = new MongoClient(connectionString);
MongoDatabase database = mongoClient.getDatabase("mydb");
阿里云官方推荐使用方法,支持主从节点不固定的情况下,自动识别。
获取 collection
MongoCollection<Document> collection = database.getCollection("test");
插入文档
文档结构:
{
"name" : "MongoDB",
"type" : "database",
"count" : 1,
"info" : {
x : 203,
y : 102
}
}
相应的Bson Document对象:
Document doc = new Document("name", "MongoDB")
.append("type", "database")
.append("count", 1)
.append("info", new Document("x", 203).append("y", 102));
// 插入文档
collection.insertOne(doc);
注意:info 使用内嵌对象
插入多个文档
List<Document> documents = new ArrayList<Document>();
for (int i = 0; i < 100; i++) {
documents.add(new Document("i", i));
}
collection.insertMany(documents);
统计文档总数
System.out.println(collection.count());
查询单篇文档
Document myDoc = collection.find().first();
System.out.println(myDoc.toJson());
查询所有文档
MongoCursor<Document> cursor = collection.find().iterator();
try {
while (cursor.hasNext()) {
System.out.println(cursor.next().toJson());
}
} finally {
cursor.close();
}
使用查询过滤器
- 查询单篇文档
import static com.mongodb.client.model.Filters.*;
myDoc = collection.find(eq("i", 71)).first();
System.out.println(myDoc.toJson());
- 查询多篇文档
MongoCursor<Document> cursor = dbCollection
.find(gt("i", 0))
.iterator();
while (cursor.hasNext()) {
System.out.println(cursor.next());
}
- 指定多个查询条件
// 10 <= i <= 100
Bson filter = and(gte("i",10),lte("i",100));
// status = 1
filter = and(filter, eq("status",1));
myDoc = collection.find(filter).first()
- 使用ID查询
// 使用ObjectId对象来包装id
Document doc = dbCollection
.find(eq("_id", new ObjectId("576c00b50cf23b8ea4175a14")))
.first();
使用排序
import static com.mongodb.client.model.Sorts.*;
// ascending 升序 descending 降序
myDoc = collection.find(exists("i")).sort(descending("i")).first();
System.out.println(myDoc.toJson());
指定查询字段
// excludeId() 排除_id字段
myDoc = collection.find().projection(excludeId()).first();
System.out.println(myDoc.toJson());
// 只包含部分字段
myDoc = collection.find().projection(include("news_title","news_posttime")).first();
System.out.println(myDoc.toJson());
// 上面的查询是会返回_id字段的,如果要排除_id字段,可以使用Bson 类型来限定多个条件
Bson fields = include("news_title", "news_uuid", "news_posttime");
fields = and(fields, excludeId());
// 只返回news_title,news_uuid字段
myDoc = collection.find().projection(fields).first();
System.out.println(myDoc.toJson());
更新文档
- 更新单个文档
collection.updateOne(eq("i", 10), set("i", 110));
- 更新多个文档
UpdateResult updateResult = collection.updateMany(lt("i", 100), inc("i", 100));
System.out.println(updateResult.getModifiedCount());
删除文档
- 删除单个文档
collection.deleteOne(eq("i", 110));
- 删除多个文档
DeleteResult deleteResult = collection.deleteMany(gte("i", 100));
System.out.println(deleteResult.getDeletedCount());