4.通过Java程序操作MongoDB
4.1 连接数据库
下载驱动并将驱动jar包加入项目的classpath,驱动包下载地址:http://central.maven.org/maven2/org/mongodb/mongo-java-driver/
与关系型数据库类似,我们要指定相应的数据库地址、端口号以及数据库名称,如果指定的数据库不存在,那么MongoDB会自动创建。
import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;
public class MongoDBDemo {
public static void main(String[] args){
try {
//指定服务器地址和端口号
MongoClient client=new MongoClient("localhost",27017);
//指定连接的数据库名称
MongoDatabase database=client.getDatabase("test");
System.out.println("Connect to database successfully");
}catch (Exception e){
System.err.println(e.getClass().getName()+":"+e.getMessage());
}
}
}
在这个实例中,连接数据库并没有需要指定用户名、密码,如果我们需要连接到需要用户名密码的MongoDB数据库可以选择如下的连接方式:
public static void main(String[] args){
//db.createUser({user:"admin",pwd:"123456",roles:["root"]})命令可以在MongoDB的admin数据库中创建管理员
try{
//连接到MongoDB服务,如果是远程服务器,可以传入IP地址
ServerAddress serverAddress=new ServerAddress("localhost",27017);
List<ServerAddress> addrs=new ArrayList<ServerAddress>();
addrs.add(serverAddress);
MongoCredential credential=
MongoCredential.createScramSha1Credential("admin","test","yck4611764".toCharArray());
List<MongoCredential> credentials=new ArrayList<MongoCredential>();
credentials.add(credential);
//通过连接认证获取MongoDB的连接
MongoClient client=new MongoClient(addrs,credentials);
//连接到数据库
MongoDatabase database=client.getDatabase("test");
System.out.println("Connect to database successfully");
}catch (Exception e){
System.err.println(e.getClass().getName()+":"+e.getMessage());
}
}
4.2 创建集合
连接数据库之后再创建集合的操作时十分简单的,如下:
import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;
public class MongoDBDemo {
public static void main(String[] args){
try {
//指定服务器地址和端口号
MongoClient client=new MongoClient("localhost",27017);
//指定连接的数据库名称
MongoDatabase database=client.getDatabase("test");
System.out.println("Connect to database successfully");
//创建集合
database.createCollection("myCollection");
}catch (Exception e){
System.err.println(e.getClass().getName()+":"+e.getMessage());
}
}
}
4.3 获取集合
在上述4.2例程的基础上
//Document是org.bson.Document
MongoCollection<Document> collection=database.getCollection("myCollection");
4.4 插入文档
插入文档操作:
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import java.util.ArrayList;
import java.util.List;
public class MongoDBDemo {
public static void main(String[] args){
try {
//指定服务器地址和端口号
MongoClient client=new MongoClient("localhost",27017);
//指定连接的数据库名称
MongoDatabase database=client.getDatabase("test");
System.out.println("Connect to database successfully");
database.createCollection("myCollection");
MongoCollection<Document> collection=database.getCollection("myCollection");
//文档创建
Document document = new Document("title", "MongoDB").
append("description", "database").
append("likes", 100).
append("by", "XiaoYin");
List<Document> documents=new ArrayList<Document>();
documents.add(document);
//collection.insertOne(document);
collection.insertMany(documents);
System.out.println("document inserted successfully!");
}catch (Exception e){
System.err.println(e.getClass().getName()+":"+e.getMessage());
}
}
}
4.5 检索所有文档
- 首先要获取一个检索的迭代器
FindIterator<Document>
,可以通过Collection
对象的find()
方法获取; - 获取MongoDB的游标
MongoCursor<Document>
,游标通过调用FindIterator<Document>
的iterator()
方法获得; - 使用游标遍历集合获取文档。
...
//续上
FindIterable<Document> findIterable=collection.find();
MongoCursor<Document> cursor=findIterable.iterator();
while (cursor.hasNext()){
System.out.println(cursor.next());
}
...
4.6 更新文档
调用集合的updateOne()
方法或者updateMany()
方法,实例:
collection.updateMany(Filters.eq("likes", 100), new Document("$set",new Document("likes",200)));
4.7 删除文档
调用集合的deleteOne()
或者deleteMany()
方法,实例:
collection.deleteOne(Filters.eq("likes", 200));
collection.deleteMany (Filters.eq("likes", 200));