package per.czt.weknow.test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.bson.BSON;
import org.bson.BSONObject;
import org.bson.BasicBSONObject;
import org.bson.BsonArray;
import org.bson.Document;
import org.bson.conversions.Bson;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoClientOptions.Builder;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.WriteConcern;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.CreateCollectionOptions;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Projections;
import com.mysql.cj.x.protobuf.MysqlxCrud.Projection;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.statement.update.Update;
public class MongoDBJDBC {
private static MongoClient mongoclient;
static {
// 获取MongoDB服务器地址
ServerAddress serverAddress = new ServerAddress("localhost", 27017);
// System.out.println("serverAddress:"+serverAddress);
List<ServerAddress> addrs = new ArrayList<ServerAddress>();
addrs.add(serverAddress);
MongoCredential credential = MongoCredential.createCredential("root", "admin", "123456".toCharArray());
// System.out.println("credential:"+credential);
List<MongoCredential> credentials = new ArrayList<MongoCredential>();
credentials.add(credential);
// 通过连接认证获取数据库连接
mongoclient = new MongoClient(addrs, credentials);
// 连接到数据库
Builder options = MongoClientOptions.builder();
options.connectionsPerHost(300);// 连接池设置为300个连接,默认100
options.connectTimeout(3000);// 连接超时推荐3000毫秒
options.maxWaitTime(5000);
options.socketTimeout(0);// 套接字超时时间,0无限制
options.threadsAllowedToBlockForConnectionMultiplier(5000);// 线程队列数,如果连接线程排满了队列就会抛出“Out of semaphores to get
// db”错误
options.writeConcern(WriteConcern.SAFE);
options.build();
}
// 获取数据库
public static MongoDatabase getDatabase(String databaseName) {
if (databaseName != null && !databaseName.equals("")) {
MongoDatabase mongoDatabase = mongoclient.getDatabase(databaseName);
return mongoDatabase;
}
return null;
}
public static void queryTest(MongoCollection mongoCollection) {
// 查询所有文档
FindIterable<Document> documents1 = mongoCollection.find();
for (Document document : documents1) {
/*
* System.out.println("name: "+ document.get("name"));
* System.out.println("age: "+ document.get("age"));
*/
System.out.println("json1: " + document.toJson());
}
FindIterable<Document> documents2 = mongoCollection.find().skip(20).limit(5).sort(null);
for (Document document : documents2) {
/*
* System.out.println("name: "+ document.get("name"));
* System.out.println("age: "+ document.get("age"));
*/
System.out.println("json2: " + document.toJson());
}
/*
* BSONObject obj3=new BasicBSONObject(); obj3.put("name", "user1");
*/
// 查询name为user1的文档
FindIterable<Document> documents3 = mongoCollection.find(Filters.and(Filters.eq("name", "user1")));
for (Document document : documents3) {
/*
* System.out.println("name: "+ document.get("name"));
* System.out.println("age: "+ document.get("age"));
*/
System.out.println("json3: " + document.toJson());
}
// 查询所有记录按年龄逆序
FindIterable<Document> documents4 = mongoCollection.find().sort(new Document("age", -1));
for (Document document : documents4) {
/*
* System.out.println("name: "+ document.get("name"));
* System.out.println("age: "+ document.get("age"));
*/
System.out.println("json4: " + document.toJson());
}
FindIterable<Document> documents5 = mongoCollection.find(Filters.ne("name", "user87"))
.sort(new Document("age", -1)).skip(3).limit(10).batchSize(10);
for (Document document : documents5) {
/*
* System.out.println("name: "+ document.get("name"));
* System.out.println("age: "+ document.get("age"));
*/
System.out.println("json5: " + document.toJson());
}
FindIterable<Document> documents6 = mongoCollection.find(Filters.exists("address"));
;
for (Document document : documents6) {
/*
* System.out.println("name: "+ document.get("name"));
* System.out.println("age: "+ document.get("age"));
*/
System.out.println("json6: " + document.toJson());
}
FindIterable<Document> documents7 = mongoCollection.find(Filters.gt("age", 4));
for (Document document : documents7) {
/*
* System.out.println("name: "+ document.get("name"));
* System.out.println("age: "+ document.get("age"));
*/
System.out.println("json7: " + document.toJson());
}
// 多个条件的查询
FindIterable<Document> documents8 = mongoCollection
.find(Filters.and(Filters.ne("age", 5), Filters.exists("address", true), Filters.ne("name", "users0")));
for (Document document : documents8) {
/*
* System.out.println("name: "+ document.get("name"));
* System.out.println("age: "+ document.get("age"));
*/
System.out.println("json8: " + document.toJson());
}
FindIterable<Document> documents9 = mongoCollection.find();
for (Document document : documents9) {
/*
* System.out.println("name: "+ document.get("name"));
* System.out.println("age: "+ document.get("age"));
*/
System.out.println("json9: " + document.toJson());
}
// 显示address属性
MongoCursor<Document> documentIterator = mongoCollection.find()
.projection(Projections.fields(Projections.include("address"))).iterator();
while (documentIterator.hasNext()) {
Document document = documentIterator.next();
System.out.println("json10:" + document.toJson());
}
// 去掉_id
MongoCursor<Document> documentIterator2 = mongoCollection.find()
.projection(Projections.fields(Projections.excludeId())).iterator();
while (documentIterator2.hasNext()) {
Document document = documentIterator2.next();
System.out.println("json11:" + document.toJson());
}
// 去掉id并且显示有地址的
MongoCursor<Document> documentIterator3 = mongoCollection.find()
.projection(Projections.fields(Projections.excludeId(), Projections.include("address"))).iterator();
while (documentIterator3.hasNext()) {
Document document = documentIterator3.next();
System.out.println("json12:" + document.toJson());
}
// elemMatch使用
MongoCursor<Document> documentIterator4 = mongoCollection
.find(Projections.fields(Projections.elemMatch("students",
Filters.and(Filters.eq("name", "Joe"), Filters.eq("school", 122)))))
.projection(Projections.fields(Projections.elemMatch("students",
Filters.and(Filters.eq("name", "Joe"), Filters.eq("school", 122)))))
.iterator();
while (documentIterator4.hasNext()) {
Document document = documentIterator4.next();
System.out.println("json13:" + document.toJson());
}
}
// 插入文档
public static void insertDocuemnt(MongoCollection mongoCollection)
{
/* document1.put("name", "Sarch1");
document1.put("age", 23);*/
/*Document document1=new Document("name","fsgsg").append("age", 3).append("asss", "aaaa").append("array", Arrays.asList(Arrays.asList(1,2,3),"2","3"));
Document document2=new Document();
document2.put("name", "Sarch2");
document2.put("age", 43);
try
{
//插入一个文档
mongoCollection.insertOne(document1);
//插入多个文档
List<Document> documents=new ArrayList<Document>();
documents.add(document1);
documents.add(document2);
mongoCollection.insertMany(documents);
System.out.println("添加成功");
}
catch(Exception e)
{
e.printStackTrace();
}*/
try
{
for(int i=0;i<1000;i++)
{
mongoCollection.insertOne(new Document("id",1).append("chapter",i).append("title","title"+i).append("content", "content"+i));
}
System.out.println("添加成功");
}
catch(Exception e)
{
e.printStackTrace();
}
}
// 删除文档
public static void deleteDocument(MongoCollection mongoCollection) {
try {
// 删除一条记录
// mongoCollection.deleteOne(Filters.eq("name", "users1"));
// 删除多条记录
mongoCollection.deleteMany(Filters.or(Filters.eq("name", "Sarch1"), Filters.eq("name", "Sarch2")));
System.out.println("删除成功!");
} catch (Exception e) {
e.printStackTrace();
}
}
// 更新文档
public static void updateDocument(MongoCollection mongoCollection) {
try {
// 更新文档
mongoCollection.updateMany(Filters.and(Filters.eq("name", "users4"), Filters.eq("age", 4)),
new Document("$set", new Document("title", "1")));
System.out.println("更新成功!");
} catch (Exception e) {
e.printStackTrace();
}
}
// 获取集合
public static MongoCollection<Document> getCollection(MongoDatabase mongoDatabase, String collectionName) {
if (collectionName != null && !collectionName.equals("")) {
MongoCollection<Document> mongoCollection = mongoDatabase.getCollection(collectionName);
return mongoCollection;
}
return null;
}
// 创建集合
public static int createCollection(MongoDatabase mongoDatabase, String colectionName, Boolean capped,
int documentSize, int bytes) {
try {
mongoDatabase.createCollection(colectionName,
new CreateCollectionOptions().capped(capped).maxDocuments(documentSize).sizeInBytes(bytes));
return 1;
} catch (Exception e) {
return 0;
}
}
// 删除集合
public static void dropCollection(MongoDatabase mongoDatabase, String colectionName) {
try {
mongoDatabase.getCollection(colectionName).drop();
System.out.println("删除成功!");
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MongoDatabase mongoDatabase = getDatabase("novel");
// 创建集合
/*
* mongoDatabase.createCollection("novel"); System.out.println("集合创建成功");
*/
// 获取集合
MongoCollection<Document> mongoCollection = getCollection(mongoDatabase, "novel");
// 获取集合文档数目
// System.out.println("count:" + mongoCollection.count());
/*
* int flag=createCollection(mongoDatabase,"user6",false,100,10000); if(flag==1)
* { System.out.printf("创建集合成功\n"); } else { System.out.printf("创建集合失败\n"); }
*/
// dropCollection(mongoDatabase, "user5");
// queryTest(mongoCollection);
insertDocuemnt(mongoCollection);
// deleteDocument(mongoCollection);
// updateDocument(mongoCollection);
}
}
java操作MongoDB
最新推荐文章于 2024-06-02 20:47:57 发布