本文使用的是最新的3.0版本驱动包。maven地址
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.0.0</version>
</dependency>
无需认证连接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();
}
}