MongoDB服务调研及demo测试
一:什么是mongodb?
mongodb是一个出于关系型数据库和非关系型数据库之间的产品,我觉得更偏向与nosql,他是一个面向集合的数据库,支持的数据结构非常灵活,类似json以及bson,还有个很神奇的地方就是mongodb的查询方式,感觉语法上还和面向对象有点类似,通过方法查询,然后方法里面规定属性.
然后mongodb没有表结构的概念,每一跳记录都可以有不同的结构,拿普通的sql数据库来讲,定义一个user(userName,age,tel),那么数据库存储的内容可能是:
Kathrine 23 08122354685 , Markus 25 0148653214 , Caroline 30 02356584
但是mongodb存的数据就不一样了,它也许是:
{”username”:”katherine”,”age”:”23”}
{“username”:”Markus”,”address”:”USA”,”tel”:”03213453”}
{“username”:“Caroline”,”userInfo”:{“age”:”30”,”tel”:”20356412”}}
这就是区别,mongodb存的user这种数据,每个数据之间可以有不同的结构,非常灵活,完全不存在什么需求更新,需要多加一个字段这种问题.
二:mongodb的安装以及使用
首先在官网https://www.mongodb.com/下载mongodb.
找到download页面下载适合自己操作系统的mongodb.这里我选择的windows ,mongodb3.4.2版本.
在E盘(任意)建立以下目录:
E:
------MongoDB
-----data
-----db (存放数据库文件)
-----log (存放日志文件)
将下载好的mis文件,放在MongoDB下,然后运行.(记得选择Costom模式,Complete模式会默认安装C盘).
注: installerMSI是我新建的文件夹,里面存放的开始下载的MSI文件,以及JAVA连接驱动
没有任何环境变量的配置,直接WIN+S打开小娜(WIN 10 操作系统),或者WIN+R打开运行,输入CMD进入DOS界面
第一步:开启服务
进入E盘 e:
进入MongoDB下的bin文件夹 cd MongoDB\bin
运行 mongod.exe --dbpath=E:\MongoDB\data\db
出现waiting for connections on port 27017时即表示启动成功 可以在浏览器访问http://localhost:27017 进行查看
网页显示:看起来你正在试图通过HTTP访问MongoDB在本机驱动端口。
现在开始准备对mongodb进行操作
再打开一个DOS操作界面
和上面类似这次执行mongo.exe
现在我们已经开始准备使用mongodb了,可以使用show dbs 查看mongodb默认给我们建立了哪些数据库,这就和mysql类似,安装好之后,会有默认的数据库已经建立好了的
mongodb在使用的时候会默认操作的test这个数据库,然后我们在test下建立集合(collection)存储数据:
这句命令的意思是,在test(默认)这个DB下,寻找名字为firstCollection的集合,然后显示所有数据,这个是我刚创建的所以为空,
然后我们添加第一条数据(添加操作)
然后进行查询(查询操作),没有定义查询条件的时候默认查询所有的数据
然后这里简单解释下”_id”,这个字段是mongodb帮我们默认建的一个唯一标识,里面存放的是ObjectId这个对象,”_id”我们也可以自己定义,如下所示:
进行了添加查询之后就是修改和删除:
update()可以看成里面有两个参数,第一个参数的作用,寻找name为Markus的数据,第二个参数的作用是,将寻找到的列更新为这条数据
注意:update()不允许只更新其中一个字段,就比如说,如果后面那个参数写成了{“age”:”230”},那么最开始name为Markus的那条数据就会变为:{“_id”:ObjectId(“xxxx”),”age”:”230”},而不是在原来的基础上修改age
我这里故意把查询条件写成的”age”:”230”,就是为了体现查询的灵活性,我可以根据_id查,也可以根据name查,或者根据age查,没有任何影响.当然如果查询条件满足了多条数据就会删除多条数据.如下:
满足性别为男的有两条数据,所以这里直接删除了两条数据
以上就是mongodb的基本使用.
三 .使用java驱动在JAVA程序中操作mongodb
1:准备工作---下载jar包 http://central.maven.org/maven2/org/mongodb/mongo-java-driver/
2.编写代码: (注释已直接给出)
1):首先是如何连接mongodb:不同于mysql,mongodb的连接非常简单可以理解为,引入了驱动jar包之后,只需要一句代码....
MongoClientmongoClient =new MongoClient("localhost",27017);
2)建立连接之后就是获取mongodb下的数据库
DBdb =mongoClient.("test"); //这个”test”,就是mongodb默认建立的那个数据库getDB
3)拿到连接下的数据库之后,就是获取数据库下的集合:
DBCollectioncollection =db.getCollection("firstCollection");
-------------------------------------1,2,3点就是最基础的准备工作----------------------------------
4)查询测试:
DBCursorcur =collection.find();
while(cur.hasNext()){
System.out.println(cur.next());
}
5)新增测试:
BasicDBObjectobj =new BasicDBObject();
obj.put("name","看看中文呢");
obj.put("info","test mongoDB insert");
collection.insert(obj);
while(cur.hasNext()){
System.out.println("所有数据"+cur.next());
}
6)更新测试:
collection.update(new BasicDBObject("_id",new ObjectId("58bd214d7e053591eddd2ad4")),new BasicDBObjec("name","stefan").append("age", 132));
7)删除测试:
collection.remove(new BasicDBObject("_id",new ObjectId("58bd214d7e053591eddd2ad4")));
------------------------------------- 4, 5, 6, 7是最简单的CRUD测试 -----------------------------------------
完整demo:
package com.mongodb.test;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import org.bson.types.ObjectId;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
public class mongoUtil {
private MongoClientmongoClient =null;
private DBdb =null;
private DBCollectioncollection =null;
/***
* 初始化
*@author zhou.zhengkun
*@date 2017年3月7日
*@version V1.0
* modify history
*/
public void init(StringdbName,StringcollectionName){
mongoClient =new MongoClient("localhost",27017);
db =mongoClient.(dbName);getDB
collection =db.getCollection(collectionName);
}
/**
* 关闭连接
*@author zhou.zhengkun
*@date 2017年3月7日
*@version V1.0
* modify history
*/
public void destroy(){
if(mongoClient !=null){
mongoClient.close();
mongoClient =null;
db =null;
collection =null;
}
}
/**
* 插入新的数据
*@param dbObject
*@author zhou.zhengkun
*@date 2017年3月7日
*@version V1.0
* modify history
*/
public String insert(BasicDBObject dbObject){
DBObjectobj =dbObject;
collection.save(obj);
ObjectIdid = (ObjectId)obj.get("_id");
return id.toString();
}
/**
* 查询所有
*@author zhou.zhengkun
*@date 2017年3月7日
*@version V1.0
* modify history
*/
public List<DBObject> selectAll(){
List<DBObject>list =new ArrayList<DBObject> ();
DBCursorcursor =collection.find();
while(cursor.hasNext()){
//System.out.println(cursor.next());
//System.out.println("cursor : " + cursor);
list.add(cursor.next());
}
return list;
}
/**
* 根据ID 进行查询
*@param id
*@author zhou.zhengkun
*@date 2017年3月7日
*@version V1.0
* modify history
*/
public void getById(Stringid){
DBObjectobj =collection.findOne(new BasicDBObject("_id",new ObjectId(id)));
System.out.println(obj);
}
/**
* 模糊查询
*@param key
*@param value
*@author zhou.zhengkun
*@date 2017年3月7日
*@version V1.0
* modify history
*/
public void fuzzyQuery(Stringkey,Stringvalue){
Patternpattern = Pattern.compile(value);
BasicDBObjectobj =new BasicDBObject(key,pattern);
DBCursorcursor =collection.find(obj);
while(cursor.hasNext()){
System.out.println(cursor.next());
}
}
/**
* 更新
*@param id
*@param obj
*@author zhou.zhengkun
*@date 2017年3月7日
*@version V1.0
* modify history
*/
public void update(Stringid , BasicDBObjectobj){
BasicDBObjectcondition =new BasicDBObject("_id",new ObjectId(id));
BasicDBObjectres =obj;
//第一个BasicDBObject是找到要更改哪一个,第二个BasicDBObject是说明要改成什么样子
collection.update(condition,res);
}
/**
* 删除
*@param id
*@author zhou.zhengkun
*@date 2017年3月7日
*@version V1.0
* modify history
*/
public void delete(Stringid){
collection.remove(new BasicDBObject("_id",new ObjectId(id)));
}
public static void main (String args[]){
mongoUtiltestClass =new mongoUtil();
testClass.init("test","person");
List<DBObject>list =testClass.selectAll();
for(int i = 0 ; i<list.size();i++){
System.out.println(list.get(i));
System.out.println(list.get(i).get("name"));
}
//testClass.getById("58bd20da7e053591eddd2ad3");
//testClass.fuzzyQuery("age", "23");
//testClass.update("58bd20da7e053591eddd2ad3", new BasicDBObject("name","kunkun").append("age", "18"));
//ObjectId objId = new ObjectId("kasdwesdz5321");
//String id = testClass.insert(new BasicDBObject("_id",new ObjectId("asdas")).append("sex", "famile").append("name","Katherine"));
//testClass.getById(id);
testClass.selectAll();
//testClass.delete("58be1ef6d2961d04a4cb9def");
//testClass.selectAll();
testClass.destroy();
}
}
-----
@author zhou.zhengkun
@date 2017年3月7日
@version V1.0