MongoDB是一款NoSql数据库。NoSql数据库叫非关系型数据库,NoSql的全名Not only sql。是为了解决高并发、高可用、高可扩展,以及大数据存储等一系列问题而产生的数据库解决方案。NoSql,它不能替代关系型数据库,只能作为关系型数据库的一个良好补充。

  NoSql数据库又分为多种,如键值(Key-Value)存储数据库(如redis),列存储数据库(如HBase),文档型数据库(如MongoDB),图形(Graph)数据库等。

  MongoDB作为文档型数据库,其典型应用是Web应用(与Key-Value类似,Value是结构化的),它的数据模型是 一系列键值对。MongoDB的优势是数据结构要求不严格,操作灵活;劣势是查询性能不高,而且缺乏统一的查询语法。

  当前,我们以win7系统为例,64位win7安装MongoDB相对简单,因为MongoDB官网在community server版本(https://www.mongodb.com/download-center#community)中仅推荐了一款64位的MongoDB,在安装方面,网上也提供了不少帖子,相信大家都能顺利安装好。

  相比较而言,32位的win7系统在安装MongoDB时就要繁琐很多。那么,对于使用32位win7系统的朋友而言,应该如何安装MongoDB,以及使用呢?

  第一步:

  首先,在这个网址中https://www.mongodb.org/dl/win32/i386下载后缀为msi的MongoDB,此处以v3.2.19版本为例。

  下载了MongoDB后,双击运行即可进入安装;在安装过程中,可以选择程序安装路径。在此,我将程序安装路径改为E:\mongodb2。

  MongoDB安装好后,在E:\mongodb2下会生成一个bin目录,bin目录是可执行文件目录,启动mongo的服务器端以及客户端都在这里;同时,我们还要在E:\mongodb2下新建三个目录:conf为配置文件存放目录;data为数据存放目录;log为日志存放目录。如下所示:

  接着,在conf下创建一个名称为mongod.conf的配置文件,里面内容如下:

port=6699
dbpath=E:\mongodb2\data
logpath=E:\mongodb2\log\mongod.log

  配置文件里配置了MongoDB服务开启后的端口,数据文件目录,日志存放目录。为mongod.conf的常见基本配置参数释义(本文简单演示,仅配置上面三项即可):

#数据库数据存放目录
dbpath=../data
#数据库日志存放目录
logpath=../logs/mongod.log
#以追加的方式记录日志
logappend = true
#端口号 默认为27017
port=6699
#以后台方式运行进程
fork=true
#开启用户认证
auth=true
#关闭http接口,默认关闭http端口访问
nohttpinterface=true
#mongodb所绑定的ip地址
bind_ip = 127.0.0.1
#启用日志文件,默认启用
journal=true
#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false
quiet=true  

  同时,在log目录下创建名称为mongod.log的文件,里面内容可以为空,在MongoDB服务启动后,这个日志文件里会记录服务运行情况。

  第二步:

  接下来,将MongoDB安装为Windows服务,这步很关键。先是切换到bin目录下,然后打开DOS窗口,执行如下命令:

E:\mongodb2\bin>mongod --dbpath "E:\mongodb2\data" --logpath "E:\mongodb2\log\mongod.log" --install --serviceName "MongoDB"  --journal

  这时,查看win7计算机管理的服务列表,可以看到名称为MongoDB的Windows服务已经在里面。

  第三步:

  我们可以Windows的服务列表窗口里开启MongoDB服务,也可以在DOS窗口里启动MongoDB服务:

net start MongoDB

  这时,计算机的服务列表里显示MongoDB服务已经开启。我们还可以点击MongoDB的启动类型,将其设置为手动。如下所示:

  其实,我们在进行完“第二步”后,不必再进行第三步(第三步主要是为了演示Windows服务的启动,此处可以忽略),直接通过一个批处理文件配置MongoDB的端口(如果MongoDB没有安装在本地,需要在配置文件mongod.conf里加上"bind_id=ip地址")等信息,然后启动MongoDB服务;接着,再通过一个批处理文件启动操作MongoDB的客户端即可。这就是我们下面要讲述的内容。

  为了以后启动MongoDB服务,以及使用MongoDB服务更方便,我们还可以制作两个批处理文件。一个名称为“启动MongoDB服务端.bat”,内容如下:

E:
cd E:\mongodb2\bin
mongod -f E:\mongodb2\conf\mongod.conf --journal
pause

  另一个是启动MongoDB客户端,从而操作MongoDB。这个批处理文件名称为“启动MongoDB客户端.bat”,内容如下:

E:
cd E:\mongodb2\bin
mongo 127.0.0.1:6699/test
pause

  接着,双击“启动MongoDB服务端.bat文件,启动成功后显示如下:

  这时,在浏览器地址栏里输入http://localhost:6699,显示如下:

  这说明MongoDB服务已经设置和开启成功。接下来,启动MongoDB客户端,操作MongoDB。

  双击“启动MongoDB客户端.bat”批处理文件,显示如下:

  说明MongoDB客户端启动成功。

  到此,MongoDB安装完毕,客户端也启动完毕,我们接下来操作MongoDB。

  MongoDB有这些基本操作命令,我们了解下:

 (1)查询数据库结构:
#查看现有数据库
> show dbs
local 0.078GB
#使用某个数据库;没有就创建并使用
> use yc
switched to db yc
#插入数据
> db.yc.insert({"_id":1001,"name":"lzy","sex":"男"})
WriteResult({ "nInserted" : 1 })
#插入指定数据库下的所有数据
> db.yc.find()
{ "_id" : 1001, "name" : "lzy", "sex" : "男" }
#更新数据
> db.yc.update({"_id":1001},{"name":"nlz","sex":"女"})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.yc.find()
{ "_id" : 1001, "name" : "nlz", "sex" : "女" }
#删除数据
> db.yc.remove({"_id":1001})
WriteResult({ "nRemoved" : 1 })
> db.yc.find()
#创建数据集合
> db.createCollection("colA",{autoIndexId:true})
{
"note" : "the autoIndexId option is deprecated and will be removed i
"ok" : 1
}
> db.colA.insert({"_id":1001,"name":"张三"})
WriteResult({ "nInserted" : 1 })
> for(i=1;i<=10;i++) db.colA.insert(data:i)
2018-04-29T00:53:17.887+0800 E QUERY [thread1] SyntaxError: missing ) aft
#批量插入数据
> for(i=1;i<=10;i++) db.colA.insert({data:i})
WriteResult({ "nInserted" : 1 })
> db.colA.find()
{ "_id" : 1001, "name" : "张三" }
{ "_id" : ObjectId("5ae4a71301b5efddc588c80a"), "data" : 1 }
{ "_id" : ObjectId("5ae4a71301b5efddc588c80b"), "data" : 2 }
{ "_id" : ObjectId("5ae4a71301b5efddc588c80c"), "data" : 3 }
{ "_id" : ObjectId("5ae4a71301b5efddc588c80d"), "data" : 4 }
{ "_id" : ObjectId("5ae4a71301b5efddc588c80e"), "data" : 5 }
{ "_id" : ObjectId("5ae4a71301b5efddc588c80f"), "data" : 6 }
{ "_id" : ObjectId("5ae4a71301b5efddc588c810"), "data" : 7 }
{ "_id" : ObjectId("5ae4a71301b5efddc588c811"), "data" : 8 }
{ "_id" : ObjectId("5ae4a71301b5efddc588c812"), "data" : 9 }
{ "_id" : ObjectId("5ae4a71301b5efddc588c813"), "data" : 10 }
#修改数据集合里某个数据的值
> db.colA.update({"name":"张三"},{"name":"李四"})

  上面是MongoDB的一些基本操作指令。通过上述操作,我们可以观察出一个特点,那就是:MongoDB存储数据是以json格式进行的(如:({"key":"value,..."}))。

  接下来,我们再看在Java程序中如何操作MongoDB。

  我们以idea这款IDE工具为例,创建一个工程,然后在工程里添加MongoDB与单元测试的依赖(这是因为我们要用单元测试展开测试),如下图:

  接下来,测试连接MongoDB服务(TestConnection2.java):

package com.itszt;

import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;
import org.junit.Test; /**
* 测试连接MongoDB
*/
public class TestConnection2 {
@Test
public void testConnMongo(){
//连接到MongoDB服务
MongoClient mongoClient=new MongoClient("127.0.0.1",6699);
//连接到MongoDB数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase("test");
System.out.println("mongoDatabase = " + mongoDatabase);
System.out.println("MongoDB connect successfully");
//关闭MongoDB服务
mongoClient.close();
}
}

  控制台打印如下(显示正常):

mongoDatabase = com.mongodb.MongoDatabaseImpl@150efb8
MongoDB connect successfully

  接下来,我们再通过java程序操作MongoDB(TestCURD2.java):

  

package com.itszt;

import com.mongodb.BasicDBObject;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.CreateCollectionOptions;
import org.bson.Document;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; import java.util.ArrayList;
import java.util.regex.Pattern; /**
* 测试MongoDB的数据操作
*/
public class TestCURD2 {
private MongoClient mongoClient;
private MongoDatabase mongoDatabase; @Before
public void init() {
mongoClient = new MongoClient("127.0.0.1", 6699);
mongoDatabase = mongoClient.getDatabase("test");
System.out.println("MongoDB connect successfully");
} @After
public void close() {
mongoClient.close();
} @Test
public void testCollection() {
CreateCollectionOptions collectionOptions = new CreateCollectionOptions();
collectionOptions.autoIndex(true);
/*
capped为true,表示起用封闭的集合,集合容量有固定上限,
集合超过上限时会自动覆盖其最旧的目录
如果capped为true,则必须指定size参数
sizeInBytes()表示集合字节大小
*/
/*collectionOptions.capped(true);
collectionOptions.sizeInBytes(1024*1024*100);*/ //设置集合中文档个数的上限
collectionOptions.maxDocuments(1000);
mongoDatabase.createCollection("colD", collectionOptions);
MongoCollection<Document> colD = mongoDatabase.getCollection("colD");
System.out.println("colD = " + colD);
} //测试对于数据集合的添加
@Test
public void testInsert() {
MongoCollection<Document> colD = mongoDatabase.getCollection("colD"); ArrayList<Document> documents = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
Document document = new Document();
document.append("userName", "张三-" + i);
document.append("userPwd", "admin_" + i);
documents.add(document);
}
//批量插入数据
colD.insertMany(documents); //如果插入单条数据,则是:
//colD.insertOne(Docoment document);
} //测试查询数据集合
@Test
public void testFind(){
MongoCollection<Document> colD = mongoDatabase.getCollection("colD"); //正则条件
BasicDBObject basicDBObjectReg = new BasicDBObject();
Pattern pattern = Pattern.compile(".*[0]");
basicDBObjectReg.put("$regex",pattern);
//条件约束
BasicDBObject basicDBObject = new BasicDBObject();
basicDBObject.append("userName",basicDBObjectReg); FindIterable<Document> documents = colD.find(basicDBObject);
MongoCursor<Document> iterator = documents.iterator();
Document document =null;
while (iterator.hasNext()){
document = iterator.next();
//取得整个数据
System.out.println("document = " + document);
//取得若干字段值
System.out.println(document.get("userName")+"-->"+document.get("userPwd"));
}
} //测试对于数据集合的修改
@Test
public void testUpdate(){
MongoCollection<Document> colD = mongoDatabase.getCollection("colD"); BasicDBObject basicDBObjectOld = new BasicDBObject();
basicDBObjectOld.put("userName","李四"); BasicDBObject basicDBObjectNew = new BasicDBObject();
basicDBObjectNew.put("userName","王五"); BasicDBObject update = new BasicDBObject("$set", basicDBObjectNew);
colD.updateOne(basicDBObjectOld,update); //批量修改
//colD.updateMany(basicDBObjectOld,update);
} //测试对于数据集合的删除
@Test
public void testDelete(){
MongoCollection<Document> colD = mongoDatabase.getCollection("colD"); //正则条件
BasicDBObject basicDBObjectReg = new BasicDBObject();
Pattern pattern = Pattern.compile("王.*");
basicDBObjectReg.put("$regex",pattern);
//条件约束
BasicDBObject basicDBObject = new BasicDBObject();
basicDBObject.append("userName",basicDBObjectReg); colD.deleteOne(basicDBObject); //批量删除
// colD.deleteMany(basicDBObject);
}
}

MongoDB的安装与使用的更多相关文章

  1. MongoDB下载安装与简单增删改查

    Windows下MongoDB的安装和配置.启动和停止 下载地址:MongoDB的官方下载网址是:https://www.mongodb.org/downloads 安装步骤1. 点击下载的mongo ...

  2. MongoDB的安装与设置MongoDB服务

    Mongo DB 是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式备受当前IT从业人员的青睐.Mongo DB很好的实现了面向对象的思想(OO思想),在Mongo DB ...

  3. Linux下MongoDB服务安装

    Linux下MongoDB服务安装 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案.MongoDB是一个介于关系数据库和非关系数据 ...

  4. MongoDB学习-安装流程

    MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型. ...

  5. mongodb(二) 安装和使用

    mongodb的安装和使用 最近的项目需要使用到mongodb,从而开始熟悉nosql,有了本篇文章,记录和方便他人. mongodb的安装 下载地址:http://www.mongodb.org/d ...

  6. MongoDB的安装及配置

    MongoDB 是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式备受当前IT从业人员的青睐. Windows (1). 登录Mongodb官网点击下载 (2). 将zi ...

  7. MongoDB的安装 转

    第1章 MongoDB的安装 (黎明你好原创作品,转载请注明) 1.1 MongoDB简介 MongoDB是一个基于分布式文件存储的数据库开源项目.由C++语言编写,旨在为WEB应用提供可护展的高性能 ...

  8. MongoDB的安装,配置与开机自启动

    关于简介不多说百度去吧少年.. MongoDB详细安装: 1.进入官网,点击DOWNLOAD MONGODB,下载所需要的版本.. 我这里把下载的文件放在d\MongoDB文件夹下,点击下载的官方镜像 ...

  9. MongoDB(二)——安装配置了解

    前边介绍了MongoDB的大概理论知识,这篇来对MongoDB进行一下安装使用,支持安装在windows和linux上,当然了很多其它情况下我们是安装在linux上,由于毕竟server用linux的 ...

  10. MongoDB本地安装与启用(windows )

    MongoDB的安装与MongoDB服务配置 Mongo DB 是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式备受当前IT从业人员的青睐.Mongo DB很好的实现了 ...

随机推荐

  1. 【BZOJ1045】糖果传递(贪心)

    [BZOJ1045]糖果传递(贪心) 题面 BZOJ 洛谷 题解 秉承者娱乐精神,我们必须写一个费用流,并且相信信仰跑不过去. 于是写了一个\(zkw\)费用流如下:(您可以无视此份代码) #incl ...

  2. 【BZOJ3675】【Apio2014】序列分割

    Description 传送门 Solution ​ 之前我也遇到过一次这种"两段之和乘积作为贡献"的问题:考虑把这一种\((\sum) *(\sum)\)的形式拆括号,就可以发现 ...

  3. 【Learning】常系数线性齐次递推

    给定数列前k项\(h_0...h_{k-1}\),其后的项满足:\(h_i=\sum_{i=1}^kh_{i-j}a_i\),其中\(a_1...a_k\)是给定的系数,求\(h_n\) 数据范围小的 ...

  4. 前端学习 -- image标签和meta标签

    Image标签 使用img标签来向网页中引入一个外部图片, img标签也是一个自结束标签 属性: src:设置一个外部图片的路径 alt:可以用来设置在图片不能显示时,对图片的描述 搜索引擎可以通过a ...

  5. linux下tar.gz、tar、bz2、zip等解压缩、压缩命令

    转至:http://www.jb51.net/LINUXjishu/43356.html 说明:Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令 ...

  6. POI的XWPFParagraph.getRuns分段问题 多余逗号

    POI的XWPFParagraph.getRuns分段问题 2018年08月28日 09:49:32 银爪地海贼 阅读数:376   这是我的模板 后台打印出来是分段的 造成这样的原因是${name} ...

  7. RF - selenium - 常用关键字

    1. 打开浏览器 Open Browser    htpp://www.testclass.net    chrome 2. 关闭浏览器 Close Browsers Close All Browse ...

  8. python---基础知识回顾(八)数据库基础操作(sqlite和mysql)

    一:sqlite操作 SQLite是一种嵌入式数据库,它的数据库就是一个文件.由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以 ...

  9. PHP常见数组方法和函数

    current();当前游标指向的数组单元值 next();下一个数组单元值 end()最后一个 reset()复位 prev()把数组指针往前一位 写法:$arr=array('a','b','c' ...

  10. hdu 3065病毒侵袭持续中

    病毒侵袭持续中 http://acm.hdu.edu.cn/showproblem.php?pid=3065 Time Limit: 2000/1000 MS (Java/Others)    Mem ...