Mongodb提供了很多的客户端: shell,python, java, node.js...等等.
以 java 为例实现简单的增删改查
pom文件:
org.mongodb
mongodb-driver
3.4.3
org.mongodb
mongodb-driver-async
3.4.3
org.slf4j
slf4j-log4j12
1.7.25
在这里我们先封装一个mongodb管理类:
importjava.util.ArrayList;importjava.util.List;importjava.util.Map;importorg.bson.Document;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importcom.mongodb.MongoClient;importcom.mongodb.client.MongoCollection;importcom.mongodb.client.MongoCursor;importcom.mongodb.client.MongoDatabase;importcom.mongodb.client.model.CreateCollectionOptions;importcom.mongodb.client.result.DeleteResult;/*** MongoDB管理类
*@authorjiangyuechao
**/
public classMongoDBHelper {static Logger logger = LoggerFactory.getLogger(MongoDBHelper.class);static String ip = "10.80.18.1";//10.80.21.41 10.80.18.1
static MongoClient mongoClient = new MongoClient(ip, 27017);//MongoDatabase实例是不可变的
staticMongoDatabase database;//firstDB
public static voidconnect(String databaseName){
database=mongoClient.getDatabase(databaseName);
}public static MongoCollectiongetCollection(String collectionName){//MongoCollection实例是不可变的
if(!collectionExists(collectionName)){return null;
}
MongoCollection collection =database.getCollection(collectionName);returncollection;
}public static boolean collectionExists(finalString collectionName) {boolean collectionExists =database.listCollectionNames()
.into(new ArrayList()).contains(collectionName);returncollectionExists;/*MongoIterable mongoIterable = database.listCollectionNames();
for (Iterator iterator = mongoIterable.iterator(); iterator.hasNext();) {
String name = iterator.next();
logger.info("name:{}", name);
if(name.equals(collectionName)){
return true;
}
}
return false;*/}public static void getAllDocuments(MongoCollectioncollection){
MongoCursor cursor =collection.find().iterator();try{while(cursor.hasNext()) {
System.out.println(cursor.next().toJson());
}
}finally{
cursor.close();
}
}public static String getDocumentFirst(MongoCollectioncollection){
Document myDoc=collection.find().first();returnmyDoc.toJson();
}public static void createDocument(MongoCollection collection,Mapmap){
System.out.println("--------------------");
map.forEach((k,v)->{ System.out.println("Key : " + k + " Value : " +v);});
}/*** 插入一个Document
*@paramcollection
*@paramdoc*/
public static void insertDocument(MongoCollectioncollection,Document doc){
collection.insertOne(doc);
}/*** 插入多个Document
*@paramcollection
*@paramdocuments*/
public static void insertManyDocument(MongoCollection collection,Listdocuments){
collection.insertMany(documents);
}/*** 显示创建集合*/
public static voidexplicitlyCreateCollection(String collectionName){
database.createCollection(collectionName,new CreateCollectionOptions().capped(false));
}//删除集合的所有文档
public static long deleteAllDocument(MongoCollectioncollection) {
DeleteResult deleteResult= collection.deleteMany(newDocument());long count =deleteResult.getDeletedCount();returncount;
}//删除集合
public static void deleteCollection(MongoCollectioncollection) {
collection.drop();
}/***
* 关闭客户端
*
*
*@authorjiangyuechao 2018年4月9日 上午11:23:36*/
public static voidcloseDb() {
mongoClient.close();
}
}
简单分析:
1. 使用 ip, port 连接mongodb数据库: static MongoClient mongoClient = new MongoClient(ip, 27017);
2. 连接数据库: database = mongoClient.getDatabase(databaseName);
3. 连接集合: MongoCollection collection = database.getCollection(collectionName);
4. 封装了基本的创建集合, insert ,delete操作.
使用实例
QuickTour例子:
packagecom.chaochao.mongodb;import staticcom.mongodb.client.model.Filters.eq;import staticcom.mongodb.client.model.Filters.gte;import staticcom.mongodb.client.model.Filters.lt;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.List;importorg.bson.Document;importcom.mongodb.client.MongoCollection;importcom.mongodb.client.model.Filters;importcom.mongodb.client.result.DeleteResult;importcom.mongodb.client.result.UpdateResult;public classQuickTour {static String databaseName = "firstDB";static String collectionName = "firstCollection1";static MongoCollectionfirstCollection;public static voidmain(String[] args) {
QuickTour quickTour= newQuickTour();
quickTour.setUp();//quickTour.updateMultipleDoc();//quickTour.deleteMultiple();
quickTour.getAllDocuments();
}/*** 连接数据库*/
public voidsetUp(){
MongoDBHelper.connect(databaseName);
firstCollection=MongoDBHelper.getCollection(collectionName);
}public voidgetAllDocuments(){
MongoDBHelper.getAllDocuments(firstCollection);
}public voidgetDocumentFirst(){
MongoDBHelper.connect(databaseName);
MongoCollection collection =MongoDBHelper.getCollection(collectionName);
String json=MongoDBHelper.getDocumentFirst(collection);
System.out.println(json);
}/*** 返回符合匹配条件的第一个doc
*@paramcollection*/
public voidgetDocMatcheFilter(){
Document myDoc= firstCollection.find(eq("y", 2)).first();
System.out.println(myDoc.toJson());
}public voidgetAllDocMatcheFilter(){
firstCollection.find(Filters.gt("i", 10)).forEach((Document document)->{System.out.println(document.toJson());});
}public voidupdateOneDoc(){
UpdateResult updateResult= firstCollection.updateOne(Filters.eq("i", 12), new Document("$set", new Document("i", 21)));
System.out.println(updateResult.getModifiedCount());
}public voidupdateMultipleDoc(){
UpdateResult updateResult= firstCollection.updateMany(lt("i", 100), new Document("$inc", new Document("i", 100)));
System.out.printf("count:%s,insertedId:%s",updateResult.getModifiedCount(),updateResult.getUpsertedId());
System.out.println();
}public voiddeleteOne(){
DeleteResult deleteResult= firstCollection.deleteOne(eq("i", 121));
System.out.println(deleteResult.getDeletedCount());
}public voiddeleteMultiple(){
DeleteResult deleteResult= firstCollection.deleteMany(gte("i", 100));
System.out.println(deleteResult.getDeletedCount());
}/*** 插入一个doc
*@paramcollection*/
public voidinsertDocument(){
Document doc= new Document("name", "MongoDB")
.append("type", "database")
.append("count", 1)
.append("versions", Arrays.asList("v3.2", "v3.0", "v2.6"))
.append("info", new Document("x", 203).append("y", 102));
MongoDBHelper.insertDocument(firstCollection, doc);
}/*** 插入多个doc
*@paramcollection*/
public voidinsertMultipleDoc(){
List documents = new ArrayList();for (int i = 0; i < 100; i++) {
documents.add(new Document("i", i));
}
MongoDBHelper.insertManyDocument(firstCollection, documents);
}public voidcountDocs(){
System.out.println(firstCollection.getNamespace().getCollectionName()+"-count:"+firstCollection.count());
}
}
这个例子展示了基本的增删改查操作,直接可以运行..安装mongodb参照官网,挺简单的,java 连接mongodb参照我前边的博客:Java驱动远程连接mongoDB(简明易懂版)
比如我的获取firstCollection1 集合的所有文档 :
{ "_id" : { "$oid" : "5a631d80070db90c43a3477d" }, "x" : 1.0 }
{ "_id" : { "$oid" : "5a631db0070db90c43a3477e" }, "y" : 2.0 }
{ "_id" : 10.0, "calc" : 2.555555000005E12 }
{ "_id" : { "$oid" : "5a66d717ba3c702c14df31b3" }, "name" : "MongoDB", "type" : "database", "count" : 1, "versions" : ["v3.2", "v3.0", "v2.6"], "info" : { "x" : 203, "y" : 102 } }
{ "_id" : { "$oid" : "5a9220cafffeed155066c035" }, "domainID" : { "$numberLong" : "2001" }, "type" : "chao" }
mongodb简单的CRUD还是很好理解的,这里只是一个入门,让你快速熟悉它的操作,跟传统的数据库逻辑还是一致的:
1. 连接数据库
2. 执行操作
3. 关闭连接
那些复杂的查询和更新操作,我们放在后边介绍,比如: 如何匹配数组中的元素? 如何匹配嵌入文档,查询值为 null 的字段 等等..