一、准备工作
1、开发环境:
System:Windows
IDE:eclipse、MyEclipse 8
Database:mongoDB(Linux)
2、开发依赖库:
jar包:
mongodb-driver-3.9.0.jar #mongodb驱动包
bson-3.9.0.jar #mongodb核心依赖包
mongodb-driver-core-3.9.0.jar # mongodb核心依赖包
junit-4.12.jar #单元测试
maven:
<dependencies>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>3.9.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
3、首先,下载mongoDB对Java支持的驱动包
驱动包下载地址:https://mongodb.github.io/mongo-java-driver/
mongoDB对Java的相关支持、技术:http://www.mongodb.org/display/DOCS/Java+Language+Center
驱动源码下载:https://download.github.com/mongodb-mongo-java-driver-r2.6.1-7-g6037357.zip
在线查看源码:https://github.com/mongodb/mongo-java-driver
二、Java操作MongoDB示例
在本示例之前你需要启动mongod.exe的服务,启动后,下面的程序才能顺利执行;
1、建立SimpleTest.java,完成简单的mongoDB数据库操作
1.1、新建数据库连接对象
MongoClient mongoclient = new MongoClient("192.168.25.141", 27017); //获取连接
这样就创建了一个MongoDB的数据库连接对象,它默认连接到192.168.25.134地址,端口是27017。
1.2、获取数据库链接
MongoDatabase database = mongoclient.getDatabase("mydb"); //获取数据库
这样就获得了一个mydb数据库,如果mongoDB中没有创建这个数据库也是可以正常运行的。mongoDB可以在没有创建这个数据库的情况下,完成数据的添加操作。当添加的时候,没有这个库,mongoDB会自动创建当前数据库。
1.3、获取一个“聚集集合DBCollection”
MongoCollection<Document> collection = database.getCollection("user"); //获取集合
这样就获得了一个DBCollection,它相当于我们数据库的“表”。
1.4、查询所有数据
//取数据
@Test
public void demo01(){
MongoClient mongoclient = new MongoClient("192.168.25.141", 27017); //获取连接
MongoDatabase database = mongoclient.getDatabase("mydb"); //获取数据库
MongoCollection<Document> collection = database.getCollection("user"); //获取集合
FindIterable<Document> users = collection.find(); //查找集合中全部数据
MongoCursor<Document> iterator = users.iterator(); //获取迭代器
while (iterator.hasNext()) {
Document document = iterator.next(); //获取下一条记录
System.out.println(document); //
/*String name = (String)document.get("name"); //获取记录中的字段
System.out.println(name);*/
}
mongoclient.close();
}
1.5、 添加操作
//添加一条String记录
@Test
public void demo02(){
MongoClient mongoclient = new MongoClient("192.168.25.141", 27017);
MongoDatabase database = mongoclient.getDatabase("mydb");
MongoCollection<Document> collection = database.getCollection("user");
collection.insertOne(new Document("mane", "李四"));
mongoclient.close();
}
//添加一条String记录(多个字段),相当于Map集合,插入Map集合推荐用此方法
@Test
public void demo03(){
MongoClient mongoclient = new MongoClient("192.168.25.141", 27017);
MongoDatabase database = mongoclient.getDatabase("mydb");
MongoCollection<Document> collection = database.getCollection("user");
Document document = new Document("name", "王五").append("age", 25).append("sex", "男");
collection.insertOne(document);
mongoclient.close();
}
//添加一条map记录
@Test
public void demo04(){
MongoClient mongoclient = new MongoClient("192.168.25.141", 27017);
MongoDatabase database = mongoclient.getDatabase("mydb");
MongoCollection<Document> collection = database.getCollection("user");
HashMap<String, Object> user = new HashMap<String, Object>();
user.put("name", "李四");
user.put("age", 23);
user.put("sex", "女");
collection.insertOne(new Document(user));
mongoclient.close();
}
//添加多条记录
@Test
public void demo05(){
MongoClient mongoclient = new MongoClient("192.168.25.141", 27017);
MongoDatabase database = mongoclient.getDatabase("mydb");
MongoCollection<Document> collection = database.getCollection("user");
Document doc1 = new Document("name", "田六").append("age", 25).append("sex", "女");
Document doc2 = new Document("name", "孙七").append("age", 28).append("sex", "女");
Document doc3 = new Document("name", "钱八").append("age", 19).append("sex", "男");
List<Document> documents = new ArrayList<Document>();
documents.add(doc1);
documents.add(doc2);
documents.add(doc3);
collection.insertMany(documents);
mongoclient.close();
}
1.6、 修改数据
//修改一条记录
@Test
public void demo06(){
MongoClient mongoclient = new MongoClient("192.168.25.129", 27017);
MongoDatabase database = mongoclient.getDatabase("mydb");
MongoCollection<Document> collection = database.getCollection("user");
UpdateResult updateOne = collection.updateOne(Filters.eq("name", "张三"), new Document("$set", new Document("name", "李四new"))); //只修改匹配到的第一条
System.out.println(updateOne);
mongoclient.close();
}
//修改多条记录
@Test
public void demo07(){
MongoClient mongoclient = new MongoClient("192.168.25.129", 27017);
MongoDatabase database = mongoclient.getDatabase("mydb");
MongoCollection<Document> collection = database.getCollection("user");
collection.updateMany(Filters.eq("name", "李四"), new Document("$set", new Document("name", "李四new")));
mongoclient.close();
}
1.7、 删除数据
//删除一条记录
@Test
public void demo08(){
MongoClient mongoclient = new MongoClient("192.168.25.141", 27017);
MongoDatabase database = mongoclient.getDatabase("mydb");
MongoCollection<Document> collection = database.getCollection("user");
DeleteResult deleteOne = collection.deleteOne(Filters.eq("name", "李四new"));//只删除匹配到的第一条
System.out.println(deleteOne);
mongoclient.close();
}
//删除多条记录
@Test
public void demo09(){
MongoClient mongoclient = new MongoClient("192.168.25.141", 27017);
MongoDatabase database = mongoclient.getDatabase("mydb");
MongoCollection<Document> collection = database.getCollection("user");
DeleteResult deleteOne = collection.deleteMany(Filters.eq("name", "李四new"));
System.out.println(deleteOne);
mongoclient.close();
}
1.8、条件查询
//条件查询
@Test
public void demo10(){
MongoClient mongoclient = new MongoClient("192.168.25.128", 27017);
MongoDatabase database = mongoclient.getDatabase("mydb");
MongoCollection<Document> collection = database.getCollection("user");
//查询id = 5c64d3cdeea71a1bd8d9c8c4,这里只取查处的第一条,遍历多条请参见demo01();
System.out.println("查询id=5c64d3cdeea71a1bd8d9c8c4: " + collection.find(new BasicDBObject("_id", new ObjectId("5c64d3cdeea71a1bd8d9c8c4"))).first());
//查询age = 24,这里只取查处的第一条,遍历多条请参见demo01();
System.out.println("查询age=24: " + collection.find(new BasicDBObject("age", 24)).first());
//查询age >= 24,这里只取查处的第一条,遍历多条请参见demo01();
System.out.println("查询age>=24: " + collection.find(new BasicDBObject("age", new BasicDBObject("$gte", 24))).first());
System.out.println("查询age<=24: " + collection.find(new BasicDBObject("age", new BasicDBObject("$lte", 24))).first());
System.out.println("查询age!=24:" + collection.find(new BasicDBObject("age", new BasicDBObject("$ne", 25))).first());
System.out.println("\r\n查询age in {19, 21, 24}:");
FindIterable<Document> findIterable = collection.find(new BasicDBObject("age", new BasicDBObject(QueryOperators.IN, new int[] {19, 21, 24})));
MongoCursor<Document> iterator = findIterable.iterator();
while (iterator.hasNext()) {
Document document = iterator.next();
System.out.println(document);
}
System.out.println("\r\n查询age not in {19, 21, 24}:" );
FindIterable<Document> findIterable2 = collection.find(new BasicDBObject("age", new BasicDBObject(QueryOperators.NIN, new int[] {19, 21, 24})));
MongoCursor<Document> iterator2 = findIterable2.iterator();
while (iterator2.hasNext()) {
Document document = iterator2.next();
System.out.println(document);
}
System.out.println("\r\n查询存在age字段的:");
FindIterable<Document> findIterable3 = collection.find(new BasicDBObject("sex", new BasicDBObject(QueryOperators.EXISTS, true)));
MongoCursor<Document> iterator3 = findIterable3.iterator();
while (iterator3.hasNext()) {
Document document = iterator3.next();
System.out.println(document);
}
System.out.println("\r\n查询不存在age字段的:");
FindIterable<Document> findIterable4 = collection.find(new BasicDBObject("sex", new BasicDBObject(QueryOperators.EXISTS, false)));
MongoCursor<Document> iterator4 = findIterable4.iterator();
while (iterator4.hasNext()) {
Document document = iterator4.next();
System.out.println(document);
}
//只查询一条数据,并且查询之后删除该数据
System.out.println("只查询一条数据,并且查询之后删除该数据: " + collection.findOneAndDelete(new BasicDBObject("name", "李四new")));
//只查询一条数据,并且查询之后替换该数据(删除原来所有key/value,并插入新key/value)
System.out.println("只查询一条数据,并且查询之后替换该数据: " + collection.findOneAndReplace(new BasicDBObject("name", "李四"), new Document("name", "李四new").append("age", 15).append("sex", "女")));
//只查询一条数据,并且查询之后修改该数据(修改指定的key/value)
System.out.println("只查询一条数据,并且查询之后修改该数据: " + collection.findOneAndReplace(new BasicDBObject("name", "李四new"), new Document("age", 100)));
mongoclient.close();
}