`

MongoDB笔记(1)-- MongoDB安装介绍及命令操作实例

 
阅读更多


 1、前言

最近开始学习使用非关系型数据库MongoDB,并借此机会把学习心得记录下来,所以本博部分资源出自其他博客或记录,如果有侵犯您的权利,请联系mycg@163.com

 

2、MongoDB简介

国际惯例,先做下MongoDB介绍:

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。


MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

 

MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。

什么是NoSql?
  NoSql,全称是 Not Only Sql,指的是非关系型的数据库。下一代数据库主要解决几个要点:非关系型的、分布式的、开源的、水平可扩展的。原始的目的是为了大规模web应用,这场运动开始于2009年初,通常特性应用如:模式自由、支持简易复制、简单的API、最终的一致性(非ACID)、大容量数据等。NoSQL被我们用得最多的当数key-value存储,当然还有其他的文档型的、列存储、图型数据库、xml数据库等。

 

  特点:

  高性能、易部署、易使用,存储数据非常方便。主要功能特性有:

  • 面向集合存储,易存储对象类型的数据。
  • 模式自由。
  • 支持动态查询。
  • 支持完全索引,包含内部对象。
  • 支持查询。
  • 支持复制和故障恢复。
  • 使用高效的二进制数据存储,包括大型对象(如视频等)。
  • 自动处理碎片,以支持云计算层次的扩展性
  • 支持Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C++语言的驱动程序,社区中也提供了对Erlang及.NET等平台的驱动程序。
  • 文件存储格式为BSON(一种JSON的扩展)。
  • 可通过网络访问。

  功能:

  • 面向集合的存储:适合存储对象及JSON形式的数据。
  • 动态查询:Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
  • 完整的索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。
  • 查询监视:Mongo包含一个监视工具用于分析数据库操作的性能。
  • 复制及自动故障转移:Mongo数据库支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转移。
  • 高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)
  • 自动分片以支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器。

 

3、MongoDB的安装和配置

 

3.1)下载MongoDB:http://www.mongodb.org/downloads,以32位的2.0.8版本为例(因为目前高于该版本的暂不支持win xp~~),下载mongodb-win32-i386-2.0.8.zip到本地,将下载的包解压到D盘并重新命名为mongodb,可以看到D:\mongodb\bin里面的.exe文件。

官网安装指引:http://docs.mongodb.org/manual/tutorial/install-mongodb-on-windows/

 

3.2) 在“D:\mongodb”目录下新建“data”文件夹,它将会作为数据存放的根文件夹。

 

3.2) 配置MongoDB环境变量。右键 我的电脑 --->属性--->高级--->环境变量D:\mongodb\bin到系统变量Path变量值后面,注意和前面的值用分号;隔开。

 

3.3)在命令下执行:mongod --dbpath D:\mongodb\data,看到类似下面的内容,说明环境变量配置成功并且成功部署和启动服务端。

 

也可以在浏览器输入:http://localhost:27017/,可以看到如下提示:
You are trying to access MongoDB on the native driver port. For http diagnostic access, add 1000 to the port number

说明MongoDB数据库服务已经成功启动了。

 

 

4、命令操作实例

 

在MongoDB数据库服务成功启动的情况下,新开命令行窗口,通过命令mongo登录MongoDB shell,如下图

 

 

登录到默认test数据库,也可以通过mongo yourDateBaseName 登录到指定数据库(就算该数据库不存在,则新建,但必须往里面写数据才生效)。

 

MongoDB基本概念:

  • 文档 --> 对应关系数据库的行,也就是一条记录。它比关系数据库的行的功能要强大,更像是是某个具体的对象。文档以一种Map的形式展现出来,当然value可以是任意的类型,也可以继续是一个文档(递归的定义)。
  • 集合 --> 对应关系数据库的表。但是它又是无模式的,即文档不要求一致。

 

基本命令操作:
1、显示数据库
show dbs


2、创建数据库:
use yourDateBaseName 这就创建了一个数据库。
不过你用show dbs,并不能显示yourDataBaseName,因为这个数据库没有任何操作。所以如果你直接离开,则本数据库会被废除。
如果你插入一条记录,此时就可以通过show dbs看到对应的数据库
如下:
record = {"name" : "lios", "age" : 30, "password" : "123456"}
db.user.insert(record)
这时使用show dbs就可以看到你的数据库了


3、显示数据库
show collections。默认的包含system.indexes 表


4、创建集合:
因为mongodb中集合是无模式的,不像传统的关系型数据库是需要预先申明表包含哪些字段并且定义字段的属性。虽有无需预先定义。使用的时候直接插入。可以见上面的例子2。


5、删除集合
db.yourCollectionName.drop()


6、将文档插入集合
record = {"name" : "lin", "age" : 20, "password" : "123456"}
db.user.insert(record);

record = {"name" : "lios", "age" : 30, "password" : "123456"}
db.user.insert(record);

record = {"name" : "alicy", "age" : 18, "password" : "123456"}
db.user.insert(record);


7、删除集合中的文档
db.yourCollectionName.remove()
会清空此集合中的所有文档

 

8、文档更新:采用Mongo的修改器对文档进行修改。


修改器列表:
8.1、

8.1.1、“$set”修改器:用了指定一个健的值。如果健不存在,就创建它。
db.user.update({"name":"lios"}, {"$set" : {"sex" : "male"}})

也可以用自动生产的ID

db.user.update({"_id":ObjectId("510a141f387667b5aac35a82")}, {"$set" : {"sex" : "male"}})

 

 

8.1.2、“$unset”删除某个健

db.user.update({"name":"lios"}, {"$unset" : {"sex" : 1}})

 

8.2、“$inc”修改器用了增加已有的健的值(比如对age+2)或者在键不存在的时候创建一个健(比如该文档不存在age的建,这新建该建,并取值为2)。
 db.user.update({"name":"lios"}, {"$inc" : {"age" : 2}})

Tips: $inc 只能用于整数,长整数和双精度浮点数。其他数会导致失败。

 

8.3、“$push”会向已有的数组末尾加入一个元素,要是没有就会创建一个新的数组。
db.user.update({"name":"lios"}, {$push : {"comments" : "this is my comments"}})

 

8.4、“$addToSet”在不重复的情况下添加
db.user.update({"name":"lios"}, {"$addToSet" : {"comments" : "your comments"}})

 

8.5、“$each”数组遍历修改器
db.user.update({"name":"lios"}, {"$addToSet" : {"comments" : {"$each" : ["your
comments", "a comments"]}}})

 

8.6、“$pop”修改器,从数组中删除任何一端删除元素
{$pop : {key : 1}}从数组末尾删除一个元素
{$pop : {key : -1}}从数组头部删除
如:
db.user.update({"name":"lios"}, {$pop:{"comments":1}})

 

9、upsert,如果存在就更新,如果不存在就根据update的条件插入一条新的记录

 

10、批量更新
    需要设置update的第四个参数为true,否则默认更新第一个匹配的文档

 

12、查询全部集合

db.user.find()
如果是console的话,默认显示20条记录

db.user.findOne(); 查询并返回一个对象。如果没有找到则返回 null

 

13、1返回指定的键

db.user.find({"password":"123456"}, {"name":1, "age":1})

根据建password查询,返回键name和健age,同时默认返回_id键的值 

 

 14、0指定不返回的建

db.user.find({"password":"123456"}, {"name":0})

返回除name之外的其他键

 

15、判定条件查询

a) “$lt” 小于
b) “$lte”小于等于
c) “$gt”大于
d) “$gte”大于等于
e) “$ne”不等于
db.user.find({"age" : {"$gte" : 18, "$lte" : 30}})

 

16、其他条件查询

a) “$in” :是否在某一个集合的查询
db.user.find({"age" : {"$in" : [17,18,19]}})
b) “$nin”:与in相对应,不处于某个结合的文档
c) “$or”:多条件查询
db.user.find({"$or" : [{"age" : 17}, {"age" : 18}]})
d) “$not”非的情况下使用。其他条件可以基于它
e) “$mod”取模查询
f) “$null”可以匹配值为null的字段,同时也能匹配键不存在的文档
如果同时要判定键存在,需要加上"$exists" 判定

 

17、查询数组

 

a) “$all” 通过多个元素匹配数组(元素位置随意)
db.user.update({"name":"alicy"}, {"$addToSet" : {"comments" : "a comments"}})
db.user.update({"name":"alicy"}, {"$addToSet" : {"comments" : "your comments"}})
db.user.find({"comments" : {"$all" : ["your comments", "a comments"]}})

b) 数组下标匹配
db.user.find({"comments.2" :  "a comments"})
   

c) "$size"数组长度匹配
db.user.find({"comments" : {"$size" : 2}})

 

18、采用点表示法查询内嵌文档(推荐)

db.user.update({"name":"lios"}, {"$set" : {"name" : {"first" : "lios", "last" : "L"}}})
db.user.update({"name":"lin"}, {"$set" : {"name" : {"first" : "lin", "last" : "L"}}})
db.user.find({"name.last" : "L"})  对name的子键last做匹配
db.user.find({"name.last" : "L", "name.first" : "lios"})


19、采用分层的方式查询

db.user.find({"name" : {"last" : "L"}})  注意这个查不出数据,因为这里是对name做全匹配
db.user.find({"name" : {"first" : "lios", "last" : "L"}})

 

 20、查询后处理方法

coll.find( ... ).sort( {field :1[, field :1] })  对返回结果进行排序(field ASC)。使用 -1 表示 DESC。
coll.find( ... ).sort( { field : 1 } )  查找匹配 criteria 的对象,并对 field 进行排序。
coll.find( ... ).limit(n )  限制结果返回 n 行。如果你只需要某几行数据,推荐这样做来获得最优性能。
coll.find( ... ).skip(n)  跳过 n 行结果。
coll.count()  返回聚集里对象的总数。
coll.find( ... ).count()  返回匹配该查询的对象总数。注意,该返回会忽略 limit 和 skip。比如有100行记录匹配该查询,但是limit为10,count() 仍会返回100。这比你自己循环更快,但仍然需要消耗些时间。

 

更多资料可以查看:http://mongodb.onconfluence.com/pages/viewpage.action?pageId=48693386

下章将介绍Mongo开发工具MongoVUE的使用

 
  • 大小: 142.8 KB
  • 大小: 10.2 KB
分享到:
评论

相关推荐

    MongoDB快速入门笔记(四)之MongoDB查询文档操作实例代码

    下面给大家介绍MongoDB查询文档操作的实例 先把student删除,再重新插入数据 > db.student.drop() true > db.student.insert([{ "_id" : 1, "name" : "zhangsan", "age": 27, "sex": 1 }, { "_id" : 2, "name

    MongoDB系列教程(六):java操作mongodb实例

    java操作mysql数据库的代码我们已经了如指掌了,增删改查,java对mongodb数据库也是类似的操作,先是数据库连接,再是进行操作。 首先我们进入进入admin数据库,然后建立自己的数据库testMongoDb,进入admin数据库后...

    Ubuntu中安装MongoDB及执行一些简单操作笔记

    主要介绍了Ubuntu中安装MongoDB及执行一些简单操作笔记,本文同时给出了查看已有数据库、删除数据库、创建数据库等操作命令实例,需要的朋友可以参考下

    mongodb数据库入门学习笔记之下载、安装、启动、连接操作解析

    本文实例讲述了mongodb数据库下载、安装、启动、连接操作。分享给大家供大家参考,具体如下: 简介: MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决...

    noteworx-react-mongodb:使用React前端捕获和管理笔记的基本笔记应用程序,用ExpressJS编写的api和mongodb来存储笔记

    产品特点添加便条编辑笔记删除笔记列出所有笔记按标题查找注释高级设计屏幕截图与开发 -Javascript运行时 -NoSQL数据库-用于主机MongoDB实例(不manadatory请参见下面的其他选项。) -Node.js的Web应用程序框架用于...

    MongoDB学习笔记

    1.post={"title":"lzgtitle","context":"wo de wen ben xin xi","date":new Date()}; 2.db.blog.insert(post); 读取 db.blog.find(); db.blog.findOne(); 更新 1.post.cruser="lzgadmin"; 2.db.blog.update({"title...

    uniprot-mongodb

    #uniprot-mongodb ##uniprot-mongodb 是什么? 它提供了一个基于 Uniprot 的蛋白质数据存储到一个 mongodb 数据库中,扩展了带注释的剪接形式。 服务器应用程序允许从不同类型的约束中检索蛋白质。 安装 先决条件 ...

    meteor-search:MongoDB中的简单全文搜索(Meteor)

    示例应用程序:如何第 1 步 -获得“真正的”MongoDB 默认情况下,Meteor 启动自己的 MongoDB 实例,它没有全文索引/搜索,因此您需要使用native 。 如果您的系统上还没有“真实”安装 MongoDB,请使用HomeBrew安装...

    ansible-opsmanager-demo:部署MongoDB Opsmanager实例和一个简单的副本集以进行演示

    该目录包含详细信息和说明,以帮助您进行设置以部署MongoDB Opsmanager实例以及MongoDB副本集。 总览 此存储库包含剧本和脚本,旨在自动执行部署和配置MongoDB Opsmanager的过程,以演示如何提高使用Opsmanager管理...

    MongoDB 复制(副本集)学习笔记

    主要介绍了MongoDB 复制(副本集),结合实例形式分析了MongoDB数据库复制的相关原理、配置、使用方法及操作注意事项,需要的朋友可以参考下

    MongoDB学习笔记(四) 用MongoDB的文档结构描述数据关系

    我们还是以samus驱动为例来分析,samus驱动支持两种方式访问数据库,基本方式和linq方式,基本方式在上篇以介绍过,linq方式我不想单独讲解应用实例,这篇我会用两种方式来对比介绍。 一、包含子文档的集合操作  有...

    MongoDB学习笔记之MapReduce使用示例

    一、mapreduce是根据map函数里调用的emit函数的第一个参数来进行分组的 Map-Reduce是一种计算模型,简单的说就是将大批量的工作(数据)分解(MAP)执行,然后再将结果...1. map :映射函数 (生成键值对序列,作为 red

    工作笔记-智能审核引擎

    1、准备demo程序,demo程序是模拟HIS和引擎数据交换的实例;指导HIS程序员如何调用引擎提供的方法。 2、准备Audit4Hospital.dll和Audit4Hospital.ini文件;Audit4Hospital.dll和Audit4Hospital.ini作为HIS一部分,...

    python基础学习笔记整理

    适合python入门学习,笔记含有示例代码,贴入工具中可执行查看效果。 1、环境准备 2、基础知识 2.1、语法 2.1.1、变量和数据类型 2.1.2、控制流程if for while 2.1.3、函数实例 2.1.4、购物车 2.1.5、字符编码与文件...

    meanstore:基于MongoDB ExpressJS AngularJS和NodeJS的简单购物车

    通过Vagrant安装MEANStore利用流浪者在MEANStore / MEANMart运行的情况下提供功能齐全的虚拟环境。 git clone https://github.com/mrlynn/meanstore.gitcd meanstorevagrant up 此时,该应用程序应该已启动并正在...

    Spring 各种例子:Spring Data Elasticsearch,JDBC,JPA,LDAP,MongoDB

    需要运行本地Elasticsearch实例才能运行测试。 3. Spring Data JDBC: - basic:展示了Spring Data JDBC的基本用法。 - immutables:展示了使用Immutables的Spring Data JDBC用法。 4. Spring Data JPA: - ...

    谷歌师兄的leetcode刷题笔记-googlenews:来自主要来源(谷歌、雅虎和RSS)的新闻爬虫

    谷歌师兄的leetcode刷题笔记新闻爬虫 这是一个从各种来源(谷歌新闻 API、谷歌新闻网站、雅虎新闻网站和大量 RSS 提要)收集实时新闻的项目。 所有数据都存储在一个 mongoDB 实例中。 依赖 < dependency > &...

    NodeJS学习笔记之Connect中间件应用实例

    我也介绍过“Connect”中间件的使用以及“Mongodb”的用法,今天就结合这两个中间件,写个实际的例子,不断完善和重构,已达到 充分学习的目的。好了,废话不说了,直接进入主题。 二,需求分析 (1),用户注册,...

Global site tag (gtag.js) - Google Analytics