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


 1、前言

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

 

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的使用

 
 1、前言
最近开始学习使用非关系型数据库MongoDB,并借此机会把学习心得记录下来,所以本博部分资源出自其他博客或记录,如果有侵犯您的权利,请联系[email protected]   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可以是任意的类型,也可以继续是一个文档(递归的定义)。
  • 集合 --> 对应关系数据库的表。但是它又是无模式的,即文档不要求一致。

猜你喜欢

转载自mixo44.iteye.com/blog/1780192