MongoDB服务调研及demo测试

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()可以看成里面有两个参数,第一个参数的作用,寻找nameMarkus的数据,第二个参数的作用是,将寻找到的列更新为这条数据

注意:update()不允许只更新其中一个字段,就比如说,如果后面那个参数写成了{age:230},那么最开始nameMarkus的那条数据就会变为:{_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.getDB("test"); //这个test,就是mongodb默认建立的那个数据库

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.getDB(dbName);

 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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值