本文使用的是最新的3.0版本驱动包。maven地址
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.0.0</version> </dependency>
说明,2.6以后的版本的java驱动和旧的版本有很大区别,本文是基于3.0版本的驱动
无需认证连接mongdb服务器
import com.mongodb.MongoClient; import com.mongodb.MongoClientOptions; import com.mongodb.MongoCredential; import com.mongodb.MongoException; import com.mongodb.WriteConcern; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; import com.mongodb.DBCursor; import com.mongodb.ServerAddress; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import java.net.InetAddress; import java.net.InterfaceAddress; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.bson.Document; //不需要认证 public class Auth_no { /** * 获得无密码验证的client * @param ip * @param port * @return */ public static MongoClient getClient(String ip,int port){ MongoClient client=null; try { MongoClientOptions.Builder build = new MongoClientOptions.Builder(); // 与数据最大连接数50 build.connectionsPerHost(50); // 如果当前所有的connection都在使用中,则每个connection上可以有50个线程排队等待 build.threadsAllowedToBlockForConnectionMultiplier(50); build.connectTimeout(1 * 60 * 1000); build.maxWaitTime(2 * 60 * 1000); MongoClientOptions options = build.build(); InetAddress inetAddress; inetAddress = InetAddress.getByName(ip); ServerAddress addr=new ServerAddress(inetAddress, port);//设置地址 client = new MongoClient(addr, options); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } return client; } public static void main(String args[]) throws UnknownHostException { MongoClientOptions.Builder build = new MongoClientOptions.Builder(); // 与数据最大连接数50 build.connectionsPerHost(50); // 如果当前所有的connection都在使用中,则每个connection上可以有50个线程排队等待 build.threadsAllowedToBlockForConnectionMultiplier(50); build.connectTimeout(1 * 60 * 1000); build.maxWaitTime(2 * 60 * 1000); MongoClientOptions options = build.build(); InetAddress inetAddress=InetAddress.getByName("127.0.0.1"); ServerAddress addr=new ServerAddress(inetAddress, 2222);//设置地址 MongoClient client = new MongoClient(addr, options); // 获取数据库test,不存在的话,会自动建立该数据库 MongoDatabase db = client.getDatabase("lhy"); // 获取data集合,不存在的话,会自动建立该集合(相当于关系数据库中的数据表) MongoCollection<Document> users = db.getCollection("lhy"); Document document = new Document(); document.append("firstName", "lei"); document.append("address", "sichuan chengdu"); users.insertOne(document); // MongoClient使用完后必须要close释放资源 client.close(); } }
需要认证
import com.mongodb.MongoClient; import com.mongodb.MongoClientOptions; import com.mongodb.MongoClientURI; import com.mongodb.MongoCredential; import com.mongodb.MongoException; import com.mongodb.WriteConcern; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; import com.mongodb.DBCursor; import com.mongodb.ServerAddress; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import java.net.InetAddress; import java.net.InterfaceAddress; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.bson.Document; /** * 需要认证 * @author Administrator * */ public class Auth_ok { /** * 第一种认证方式 */ public static void auth1(){ String sURI = String.format("mongodb://%s:%s@%s:%d/%s", "lhy1", "123", "localhost", 27017, "lhy"); MongoClientURI uri = new MongoClientURI(sURI); MongoClient mongoClient = new MongoClient(uri); MongoDatabase db = mongoClient.getDatabase("lhy"); MongoCollection<Document> users = db.getCollection("lhy"); Document document = new Document(); document.append("aaa", "lei"); document.append("bbb", "sichuan chengdu"); users.insertOne(document); mongoClient.close(); } /** * 第二种认证方式 * @throws UnknownHostException */ public static void auth2() throws UnknownHostException{ MongoClientOptions.Builder build = new MongoClientOptions.Builder(); // 与数据最大连接数50 build.connectionsPerHost(50); // 如果当前所有的connection都在使用中,则每个connection上可以有50个线程排队等待 build.threadsAllowedToBlockForConnectionMultiplier(50); build.connectTimeout(1 * 60 * 1000); build.maxWaitTime(2 * 60 * 1000); MongoClientOptions options = build.build(); MongoCredential crclientedentials = MongoCredential .createScramSha1Credential("lhy1", "lhy", "123".toCharArray()); List<MongoCredential> credentialsList = new ArrayList<MongoCredential>(); credentialsList.add(crclientedentials);//凭证列表,英文一个数据库中可能有多个账号密码 InetAddress inetAddress=InetAddress.getByName("127.0.0.1"); ServerAddress addr=new ServerAddress(inetAddress, 27017);//设置地址 MongoClient client = new MongoClient(addr, credentialsList, options); // 获取数据库test,不存在的话,会自动建立该数据库 MongoDatabase db = client.getDatabase("lhy"); // 获取data集合,不存在的话,会自动建立该集合(相当于关系数据库中的数据表) MongoCollection<Document> users = db.getCollection("lhy"); Document document = new Document(); document.append("firstName", "lei"); document.append("address", "sichuan chengdu"); users.insertOne(document); // MongoClient使用完后必须要close释放资源 client.close(); } public static void main(String args[]) throws UnknownHostException { auth1(); } }
增加
import java.util.ArrayList; import java.util.List; import org.bson.Document; import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; public class M_Insert { /** * 单个插入 */ public static void insert_1(){ MongoClient client=Auth_no.getClient("127.0.0.1", 2222); // 获取data集合,不存在的话,会自动建立该集合(相当于关系数据库中的数据表) MongoDatabase db = client.getDatabase("lhy"); MongoCollection<Document> collection = db.getCollection("lhy"); Document document = new Document(); document.append("name", "ddd aaa"); document.append("age", "lhy gggg"); collection.insertOne(document); // MongoClient使用完后必须要close释放资源 client.close(); } /** * 批量插入 */ public static void insert_2(){ MongoClient client=Auth_no.getClient("127.0.0.1", 2222); // 获取data集合,不存在的话,会自动建立该集合(相当于关系数据库中的数据表) MongoDatabase db = client.getDatabase("lhy"); MongoCollection<Document> collection = db.getCollection("lhy"); //创建一个包含多个文档的列表 List<Document> documents = new ArrayList<Document>(); for (int i = 0; i < 100; i++) { documents.add(new Document("i", i)); } // 向文档中插入列表 collection.insertMany(documents); } public static void main(String[] args) { insert_1(); } }
删除
import static com.mongodb.client.model.Filters.eq; import static com.mongodb.client.model.Filters.gte; import org.bson.Document; import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import com.mongodb.client.result.DeleteResult; public class M_Delete { public static void delete_1(){ MongoClient client=Auth_no.getClient("127.0.0.1", 2222); // 获取data集合,不存在的话,会自动建立该集合(相当于关系数据库中的数据表) MongoDatabase db = client.getDatabase("lhy"); MongoCollection<Document> collection = db.getCollection("lhy"); // 删除第一个符合条件的数据 collection.deleteOne(eq("name", "lhy")); // 获取全部文档,可以看到没有110这个数了 for (Document cur : collection.find()) { System.out.println(cur.toJson()); } // 删除所有符合条件的数据,并且返回结果 DeleteResult deleteResult = collection.deleteMany(gte("i", 100)); // 输出删除的行数 System.out.println(deleteResult.getDeletedCount()); // 获取全部文档,所有i>=100的数据都没了 for (Document cur : collection.find()) { System.out.println(cur.toJson()); } } public static void main(String[] args) { MongoClient client=Auth_no.getClient("127.0.0.1", 2222); // 获取data集合,不存在的话,会自动建立该集合(相当于关系数据库中的数据表) MongoDatabase db = client.getDatabase("lhy"); MongoCollection<Document> collection = db.getCollection("lhy"); collection.drop(); } }
修改
import static com.mongodb.client.model.Filters.eq; import static com.mongodb.client.model.Filters.gte; import static com.mongodb.client.model.Filters.lt; import org.bson.Document; import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import com.mongodb.client.result.DeleteResult; import com.mongodb.client.result.UpdateResult; public class M_Update { /* 修改时的参数: $inc 对指定的元素加 $mul 乘 $rename 修改元素名称 $setOnInsert 如果以前没有这个元素则增加这个元素,否则不作任何更改 $set 修改制定元素的值 $unset 移除特定的元素 $min 如果原始数据更大则不修改,否则修改为指定的值 $max 与$min相反 $currentDate 修改为目前的时间*/ public static void update_1() { MongoClient client=Auth_no.getClient("127.0.0.1", 2222); // 获取data集合,不存在的话,会自动建立该集合(相当于关系数据库中的数据表) MongoDatabase db = client.getDatabase("lhy"); MongoCollection<Document> collection = db.getCollection("lhy"); // 修改第一个符合条件的数据 // $set 为修改 collection.updateOne(eq("i", 10), new Document("$set", new Document("i", 110))); // 获取全部文档,可以看到以前10的地方变成了110 for (Document cur : collection.find()) { System.out.println(cur.toJson()); } // 批量修改数据并且返回修改的结果,讲所有小于100的结果都加100 UpdateResult updateResult = collection.updateMany(lt("i", 100), new Document("$inc", new Document("i", 100))); // 显示发生变化的行数 System.out.println(updateResult.getModifiedCount()); // 获取全部文档,可以看到除了刚才修改的110其他的全为了100 for (Document cur : collection.find()) { System.out.println(cur.toJson()); } } public static void main(String[] args) { } }
查询
import static com.mongodb.client.model.Filters.and; import static com.mongodb.client.model.Filters.eq; import static com.mongodb.client.model.Filters.exists; import static com.mongodb.client.model.Filters.gt; import static com.mongodb.client.model.Filters.lte; import org.bson.Document; import com.mongodb.BasicDBObject; import com.mongodb.Block; import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; public class M_Query { public static void query_1(){ MongoClient client=Auth_no.getClient("127.0.0.1", 2222); // 获取data集合,不存在的话,会自动建立该集合(相当于关系数据库中的数据表) MongoDatabase db = client.getDatabase("lhy"); MongoCollection<Document> collection = db.getCollection("lhy"); // 显示集合中的文档的数量 System.out.println(collection.count()); // 查询集合中的第一个文档 Document myDoc = collection.find().first(); System.out.println(myDoc.toJson()); //遍历文档 1 for (Document cur : collection.find()) { System.out.println(cur.toJson()); } // 遍历文档 2 MongoCursor<Document> cursor = collection.find().iterator(); try { while (cursor.hasNext()) { System.out.println(cursor.next().toJson()); } } finally { cursor.close(); } } /** * 条件查询 */ public static void query_2(){ MongoClient client=Auth_no.getClient("127.0.0.1", 2222); // 获取data集合,不存在的话,会自动建立该集合(相当于关系数据库中的数据表) MongoDatabase db = client.getDatabase("lhy"); MongoCollection<Document> collection = db.getCollection("lhy"); // 根据条件获取某分文档 eq:== Document myDoc = collection.find(eq("i", 71)).first(); System.out.println(myDoc.toJson()); // 通过查询语句一次性获取多个数据 Block<Document> printBlock = new Block<Document>() { @Override public void apply(final Document document) { System.out.println(document.toJson()); } }; // 获得所有大于50的 collection.find(gt("i", 50)).forEach(printBlock); // 大于50 小于 100 collection.find(and(gt("i", 50), lte("i", 100))).forEach(printBlock); //对输出文档进行排序,-1为递减,1为递增 // 官方文档的例子有误:http:mongodb.github.io/mongo-java-driver/3.0/driver/getting-started/quick-tour/#sorting-documents Document myDoc1 = collection.find(exists("i")) .sort(new BasicDBObject("i", -1)).first(); System.out.println(myDoc1.toJson()); // 选择性输出结果中的元素,0为不显示,1为显示 // 官方文档中的例子又不能用:http:mongodb.github.io/mongo-java-driver/3.0/driver/getting-started/quick-tour/#projecting-fields BasicDBObject exclude = new BasicDBObject(); exclude.append("_id", 0); exclude.append("count", 0); exclude.append("name", 1); exclude.append("info", 1); Document myDoc2 = collection.find().projection(exclude).first(); System.out.println(myDoc2.toJson()); } public static void main(String[] args) { } }
多语句执行
import static com.mongodb.client.model.Filters.eq; import static com.mongodb.client.model.Filters.gte; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.bson.Document; import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import com.mongodb.client.model.BulkWriteOptions; import com.mongodb.client.model.DeleteOneModel; import com.mongodb.client.model.InsertOneModel; import com.mongodb.client.model.ReplaceOneModel; import com.mongodb.client.model.UpdateOneModel; import com.mongodb.client.model.WriteModel; import com.mongodb.client.result.DeleteResult; public class M_builk { /** * 按顺序执行 */ public static void builk_1(){ MongoClient client=Auth_no.getClient("127.0.0.1", 2222); // 获取data集合,不存在的话,会自动建立该集合(相当于关系数据库中的数据表) MongoDatabase db = client.getDatabase("lhy"); MongoCollection<Document> collection = db.getCollection("lhy"); // 按照语句先后顺序执行 List list=new ArrayList(); list.add(new InsertOneModel(new Document("name", 4))); list.add(new InsertOneModel(new Document("name", 5))); list.add(new UpdateOneModel(new Document("name", 4),new Document("$set", new Document("x", 2)))); list.add(new DeleteOneModel(new Document("name", 5))); collection.bulkWrite(list); // 获取全部文档 for (Document cur : collection.find()) { System.out.println(cur.toJson()); } } /** * 不按顺序执行 */ public static void builk_2(){ MongoClient client=Auth_no.getClient("127.0.0.1", 2222); // 获取data集合,不存在的话,会自动建立该集合(相当于关系数据库中的数据表) MongoDatabase db = client.getDatabase("lhy"); MongoCollection<Document> collection = db.getCollection("lhy"); /** * 不按先手顺序执行 */ List list=new ArrayList(); list.add(new InsertOneModel(new Document("name", 4))); list.add(new InsertOneModel(new Document("name", 5))); list.add(new UpdateOneModel(new Document("name", 4),new Document("$set", new Document("x", 2)))); list.add(new DeleteOneModel(new Document("name", 5))); collection.bulkWrite(list, new BulkWriteOptions().ordered(false)); // 获取全部文档 for (Document cur : collection.find()) { System.out.println(cur.toJson()); } } public static void main(String[] args) { builk_1(); } }
时间: 2024-09-18 06:49:47