MongoDB的安装与使用

  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 {@Testpublic 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;@Beforepublic void init() {mongoClient = new MongoClient("127.0.0.1", 6699);mongoDatabase = mongoClient.getDatabase("test");System.out.println("MongoDB connect successfully");}@Afterpublic void close() {mongoClient.close();}@Testpublic 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);}//测试对于数据集合的添加@Testpublic 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);}//测试查询数据集合@Testpublic 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"));}}//测试对于数据集合的修改@Testpublic 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);}//测试对于数据集合的删除@Testpublic 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);}
} 

转载于:https://www.cnblogs.com/lizhangyong/p/8970066.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/280453.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 基准测试_如何对Linux系统进行基准测试:3个开源基准测试工具

linux 基准测试Linux’s command-line utilities can do anything, including perform benchmarks – but using a dedicated benchmarking program is a simpler and more foolproof process. These utilities allow you to perform reproducible tests across different syst…

.NET 7 新增的 IParsable 接口介绍

.NET 7 是一个新版本的 .NET&#xff0c;它新增了一个名为 IParsable 的接口。这个接口可以帮助开发人员更容易地在代码中解析字符串。IParsable 接口包含两个方法&#xff1a;Parse 和 TryParse。Parse 方法用于将一个字符串解析为指定类型的值。如果解析失败&#xff0c;则会…

CentOS 7安装nginx+php+mysql环境

0x01 安装php 1、首先得安装第三方软件库 yum install epel-release 复制代码2、安装依赖包 yum install gcc gcc-c glibc libmcrypt-devel mhash-devel libxslt-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-de…

spring+springMvc+struts的SSH框架整合

1.建立一个web项目 2.导入SSH框架所需jar包 3.配置web.xml文件 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xmlns"http://java.sun.com/xml/ns/javaee" xsi:sc…

听说这个语言认知服务又出新功能了?

点击上方蓝字关注我们&#xff08;本文阅读时间&#xff1a;7分钟)语言是人类智能发展的基石。鉴于语言拥有普遍性&#xff0c;几乎没有特定的技术或 AI 技术得以颠覆整个社会。微软的使命是赋能地球上的每个人和每个组织&#xff0c;帮助他们取得更多成就。立足于该使命&#…

强大的XML

2018-04-23 20:29:26 XML&#xff1a;Extensible Markup Language&#xff0c;也就是可扩展标记语言。XML和HTML格式是古老的标记通用语言SGML的衍生语言。 XML文件是可以用来作为配置文件的&#xff0c;相比于其他配置文件的规范&#xff0c;XML的好处在于通过自定义的标记&am…

rest_framework03:查询所有/新增数据/删除一个数据/封装Response/序列化与反序列化

查询所有 1.创建新clase和url&#xff0c;避免与查询一个功能逻辑混乱。 2.增加manyTrue&#xff0c; book_serBookSerializer(books,manyTrue) urls.py: path(books/,views.BooksView.as_view()) views.py class BooksView(APIView):def get(self,request):response_msg …

如何对DevOps数据库进行源代码控制

提纲&#xff1a; 包括索引在内的数据库模式需要进行源代码控制诸如查询表这类用于控制业务逻辑的数据需要进行源代码控制开发人员需要一种能够便捷地创建本地数据库的方法共享数据库的更新只能通过构建服务器完成 健壮的DevOps环境需要对系统的每个组件进行持续集成。但是&…

自定义异常最佳实践_播放,自定义和组织媒体的最佳文章

自定义异常最佳实践Computers today are used for much more than generating documents, writing and receiving email, and surfing the web. We also use them to listen to music, watch movies and TV shows, and to transfer media to and from mobile devices. 如今&…

CSS中的路径裁剪样式clip-path

前面的话 CSS借鉴了SVG裁剪的概念&#xff0c;设置了clip-path样式&#xff0c;本文将详细介绍路径裁剪clip-path 概述 clip-path属性可以防止部分元素通过定义的剪切区域来显示&#xff0c;仅通过显示的特殊区域。剪切区域是被URL定义的路径代替行内或者外部svg&#xff0c;或…

socket编程学习笔记

socket编程&#xff1a; 1、网络基础知识 两台计算机通过网络进行通信&#xff0c;首先两台计算机要有唯一的标识&#xff0c;即唯一的IP地址。其次他们要有共同的语言用来交流即协议。再者&#xff0c;每套主机要有相应的端口号。  TCP/IP协议&#xff1a;   --TCP/IP协议是…

rest_framework04:ModelSerializer/Serializer高级用法

ModelSerializer 1.减小序列化类代码 2.不需要重写update&#xff0c;create ser.py class BookModelSerializer(serializers.ModelSerializer):class Meta:modelBookfields__all__ #序列化全部字段# fields(name,price) # 序列化指定字段# exclude(name,) # 与fields 不能…

配置本地及网络yum源(详细步骤)

我们以centos6为范例演示 1、[rootCentos6 ~]# cd /etc/yum.repos.d/ [rootCentos6 yum.repos.d]# ls CentOS-Base.repo CentOS-fasttrack.repo CentOS-Vault.repoCentOS-Debuginfo.repo CentOS-Media.repo先罗列出相关文件 2、[rootCentos6 yum.repos.d]# vim CentOS-Base.rep…

macos mojave_如何修复macOS Mojave上的模糊字体(使用亚像素抗锯齿)

macos mojaveApple’s macOS Mojave disables subpixel antialiasing, also known as font smoothing, by default. On a MacBook Air or a desktop Mac hooked up to a non-Retina display, upgrading will make your fonts look worse. 苹果的macOS Mojave默认情况下禁用子像…

为什么我要写博客

原因在这啦 一、我觉得分享是一种精神&#xff0c;分享是我的乐趣所在&#xff0c;不是说我觉得我讲得一定是对的&#xff0c;我讲得可能很多是不对的&#xff0c;但是我希望我讲的东西是我人生的体验和思考&#xff0c;是给很多人反思&#xff0c;也许给你一秒钟、半秒钟&…

一个变量命名神器:支持中文转变量名

变量命名的规范&#xff0c;对于我们编程&#xff0c;大家都知道是非常重要的&#xff0c;上次给大家推荐过一个命名辅助工具《程序员还在为变量取名苦恼&#xff0c;那是因为你不知道&#xff0c;这个变量命名神器》&#xff0c;但大家一致反馈存在2个问题&#xff1a;1、网速…

rest_framework05:GenericAPIView用法/扩展类5个/子类9个/ViewSetMixin 自定义方法名字

GenericAPIView 1.视图层类使用GenericAPIView继承&#xff0c;能简化类里的方法code。 2.简化后的方法code格式基本通用&#xff0c;简单修改即可应用到其他类。 一、class开始加入 queryset Book.objectsserializer_class BookModelSerializer 二、方法里获取对象 a.查…

1.操作系统概述

2019独角兽企业重金招聘Python工程师标准>>> 操作系统的发展过程 无操作系统的计算机系统单道批处理系统&#xff08;50年代&#xff0c;系统资源利用率低&#xff09;多道批处理系统&#xff08;60年代&#xff09;分时系统&#xff08;70年代&#xff09;实时系统…

测听hl和nhl的区别_播放NHL曲棍球的最便宜方法(无电缆)

测听hl和nhl的区别If you’re like me, you watch hockey, and…basically no other sports. You also, like me, would like to skip the cable subscription. So what’s the cheapest way to watch NHL hockey online so you can cut the cord? 如果您像我一样&#xff0c;…

制作一个让客户满意的软件

我看了《构建之法》的第八章“需求分析”我对如何制作一个让客户满意的软件有了一点儿头绪&#xff0c;的但是还是有一些迷惑。我通过看书总结和百度查找有了一点儿总结&#xff1a;我们在制作软件的过程中应该及时与用户沟通交流&#xff0c;交换意见&#xff0c;并及时实现用…