MongoDB入门教程(二)

上一篇博文中,我详细描述了从MongoDB简介到安装,在本节,主要从整体角度去看MongoDB。

MongoDB的数据架构

官方是这样描述的

MongoDB stores all documents in collections. A collection is a group of related documents that have a set of shared common indexes. Collections are analogous to a table in relational databases.

根据其描述,可以大致归纳MongoDB的结果如下图:

解析:一个数据库(Database)中可以包含多个集合(colection),每个集合中,可以包含多个文档。可以类比,SQL数据库,一个数据库中包含多个表,每个表中包含多个记录。

命令规范

数据库命令

1.任意UTF-8(中文也行)

2.不能是空字符串

3.不得包含以:’空格’、’.’ 、’$’、’/’、’\’、’\0’。

4.长度不得超过64字节.

5.不能使用保留字:admin、local、config

集合

1.任意的UTF-8字符串

2.不能是空的字符串

3.不能包含\0、$

4.不能以system.开头

文档

1.任意的UTF-8字符串

2.不能是空字符串

3.不能包含\0、$

4.不能以_开头

数据类型

官方提示MongoDB支持类型有如下:

null null用于表示空值或者不存在的字段。 {“tmpkey”:null}

布尔 布尔类型有两个值’true’和’false1’. {“tmpkey”:true}

32位整数 类型不可用。JavaScript仅支持64位浮点数,所以32位整数会被自动转换。

64位整数 不支持这个类型。shell会使用一个特殊的内嵌文档来显示64位整数

64位浮点数 shell中的数字都是这种类型。下面的表示都是浮点数: {“tmpkey” : 5.12}

字符串 UTF-8字符串都可表示为字符串类型的数据: {“tmpkey” : “abf”}

符号 不支持这种类型。shell将数据库里的符号类型转换成字符串。

对象id 对象id是文档的12字节的唯一 ID, {“tmpkey” :ObjectId() }

日期 日期类型存储的是从标准纪元开始的毫秒数。不存储时区: {“tmpkey” : new Date()}

正则表达式 文档中可以包含正则表达式,采用JavaScript的正则表达式语法: {“tmpkey” : /\w/i}

代码 文档中还可以包含JavaScript代码:{“tmpkey” : function() { /* …… */ }}

二进制数据 二进制数据可以由任意字节的串组成。不过shell中无法使用。

最大值 BSON包括一个特殊类型,表示可能的最大值。shell中没有这个类型。

最小值 BSON包括一个特殊类型,表示可能的最小值。shell中没有这个类型。

未定义 文档中也可以使用未定义类型:{“tmpkey”:undefined}

数组 值的集合或者列表可以表示成数组:{“tmpkey” : [“a”, “b”, “c”]}

内嵌文档 文档可以包含别的文档,也可以作为值嵌入到父文档中,数据可以组织得更自然些,不用非得存成扁平结构的:{“tmpkey” : {“color” : “yello”}}

MongoDB集合的操作

在学习mongoDB集合的时候,可以将其类比SQL数据库中的表。

创建集合

1.显示创建

创建之前,我们先建立一个数据库,关于数据库的建立,可以参考上一篇文章(http://blog.csdn.net/hsd2012/article/details/51279472

我们知道,在SQL数据库中,我们使用show tables查看包含的表,那么在MongoDB怎样才能查看当前数据库中包含的集合呢?此时使用的是show collections;

student代表集合,system.indexes代表MongoDB的索引。

2.隐式创建

db.class.insert({‘classid’:1,’className’:”三年二班”});

代表网class集合中插入一个文档(班级编号为1,班级名称为三年二班)。本质是,往一个集合中插入一条数据,如果这个集合不存在,mongoDB会自动帮我们创建该集合。

显示数据库中所有集合

下面两条命令都可以实现显示所有的集合。

show collections

show tables

删除集合

db.collectionName.drop();

MongoDB文档的操作

在学习mongoDB文档的时候,可以将其类比SQL数据库表中的数据。数据库表中每一行,可以类比中集合中每一个文档。

数据的插入

MongoDB中数据插入,指的是将创建的文档,插入到指定的集合中。

命令如下:

db.collectionName.insert(doc);

官方文档提示:

The operation will create the collection if the collection does not currently exist

Insert a document into a collection

Insert an Array of Documents

如果集合不存在,则创建该集合。doc可以为一个集合或者一个集合数组。

1.向school数据库的student集合中,插入一个文档。

db.student.insert({"stu_id":1,"stu_name":"张三","age":6,"class_id":1});

通过db.student.find();查找集合中的数据,我们可以看到,刚刚我们插入的数据。那么”_id”是什么意思呢?这是MongoDB自动生成的一个全球唯一的主键,用于区分文档。其包含四部分:时间戳、机器、PID(进程号)、计数器。

1.向school数据库的student集合中,插入多个文档。

var docArr=[{"stu_id":2,"stu_name":"李四"},{"stu_id":3,"stu_name":"王五","class_id":1},{"stu_id":4,"stu_name":"赵六",age:10,"hobby":"football"}];
db.student.insert(docArr);

代码执行效果如下:

数据删除

命令如下:

db.collectionName.remove(where,[justOne]);

where 代表删除条件,当where为{}代表删除所有文档。

justOne 默认情况下为false,代表匹配条件的文档有多个的时候,删除所有的匹配文档。如果设置为true或1(设置其他非0的整数也可以),代表仅仅删除一个文档。

实例

1.删除school数据库student集合里名字(stu_name)为赵六的文档。

db.student.remove({"stu_name":"赵六"});

代码执行效果如下:

2.删除school数据库student集合里班级编号(class_id)为1的一个集合。

为了便于操作,我先往student集合里面添加了一些文档,此时集合中文档数据内容如下:

可以发现,class_id为1的集合有4个。

db.student.remove({"class_id":1},2);

执行结果如下:

可以发现,虽然满足条件的文档很多,但是仅仅删除了其中一个文档。

数据修改

在mongoDB中修改数据(文档),是通过如下命令来实现的

db.collectionName.update(query,update,upset,multi);

collectionName:集合名字

query: 修改的条件,类似SQL的where语句。

update :更新命令,类似SQL的set语句。

upset :可选,默认是false,如果未发现符合更新条件的数据内容,是否执行插入操作,1或者true代表进行插入 0或者false不进行插入。

multi :可选,mongodb 默认是false。是否进行多行更新。1或者true进行多行更新 0或者false不进行多行更新。

关于update 格式有两种形式

1.直接赋值使用{set:{}}  
如{set:{“name”:”张三”}},将名字改为张三

2.进行算术运算使用{inc:{}}  
如{inc:{“age”:3}},将age增加3

如{$inc:{“age”:-3}},将age减3

实例

1.更新学生编号(stu_id)为2文档,为其添加一个字段年龄(age)为13

db.student.update({"stu_id":2},{$set:{"age":13}});

执行结果如下:

2.更新学生,将其年龄(age)设置为12

db.student.update({},{$set:{"age":12}},0,1);

3.将班级编号为2的所有学生,年龄(age)增加1

代码如下

db.student.update({"class_id":2},{$inc:{"age":1}},0,1);

执行效果如下图

数据查询

基本的查询操作

1.查询集合中的所有文档

db.collectionName.find();

例题:查找集合student中所有数据。

为了便于查找,先向其中插入一些数据

for(var i=0;i<20;i++){
db.student.insert({"stu_id":9+i,"stu_name":"赵"+i});
}
db.student.find();

执行结果如下

2.查询集合中的第一个文档

db.collectionName.findOne();

条件查询

1.MongoDB中查询条件

数据查询条件 MongoDB中 应用实例讲解
等于(=) ---- 查找名字为李四的所有学生db.student.find({“name”:”李四”});
等于(!=) $ne 查找名字为李四的所有学生db.student.find({"name":{$ne:"李四"}});
大于(>) $gt 查找所有年龄大于5的学生db.student.find({"age":{$gt:5}});
大于(<) $lt 查找所有年龄小于15的学生db.student.find({"age":{$lt:15}});
大于等于(>=) $gte 查找所有年龄大于或等于5的学生db.student.find({"age":{$gte:5}});
小于等于(>=) $lte 查找所有年龄小于或等于15的学生db.student.find({"age":{$lte:15}});
与(and) ---- 查找所有年龄小于或等于15且班级编号为1的所有学生db.student.find({"age":{$lte:15},"class_id":1});
或(or) {$or:[{条件1},{条件2}]} 查找所有年龄小于或等于15或者班级为1的所有学生db.student.find({$or:[{"age":{$lte:15}},{"class_id":1}]});
非或(nor) {$nor:[{条件1},{条件2}]} 条件1不能满足和条件2不能满足。
集合运算符(in) {$in 查找年龄12或者13或者14的学生。db.student.find({"age":{$in:[12,13,14]}});
集合运算符(all) {$all 查找爱好包含football,和basketBall的所有学生db.student.find({"hobby":{$all:["football","basketBall"]}});
是否存在(exists) {$exists 查询存在hooby的所有学生db.student.find({hobby:{$exists:1}}),{$exists:0}代表不存在

统计、排序、分页

1.统计

db.collectionName.count();

db.collectionName.find().count();

2.排序

db.collectionName.find().sort({key:1});//key升序排列

db.collectionName.find().sort({key:-1});//key降序排列

3.分页

db.collectionName.find().skip(n).limit(m);

解析:从collectionName中第n个文档开始读取,共读取m个文档,需要注意的是MongoDB中n是从0开始的。可以类比Mysql中limit方法。n相当于limit中的第一个方法,m相当于limit中第二个参数

当使用分页时候,若使用count,需要注意mongoDB统计数量默认是忽略分页的,看下图:

怎样让其不忽视分页呢?这时候需要给count传递一个参数count(flag)。flag为0(默认情况为0)忽视分页,flag为1,不忽视分页。

实例:

1.从student中取出6~12条数据

db.student.find().skip(6).limit(6);

2.从集合student中取出第一条数据

db.student.find().skip(0).limit(1);

投影查询

在MongoDB中,上面讲的每次查询都是将所有的键都显示出来了,怎样只让部分键显示呢?这就要用到投影查询。

比如,我只让集合student查询结果中stu_name显示。

db.student.find({},{_id:0,stu_id:0});

解析:在mongoDB中,find函数里面的第二个参数是用来控制让哪些键显示或者不显示。0是不显示,1为显示。默认情况下,为显示。

备注

清空屏幕

cls命令

时间: 2024-10-08 22:32:15

MongoDB入门教程(二)的相关文章

MongoDB入门教程二[MongoDB Shell 简介与使用]

MongoDB Shell 是MongoDB自带的JavaScript Shell,随MongoDB一同发布,它是MonoDB客户端工具,可以在Shell中使用命令与MongoDB实例交互,对数据库的管理操作(CURD.集群配置.状态查看等)都可以通过MongoDB Shell来完成. 今天介绍MongoDB的一些基本命令和小技巧: 1.利用help查看帮助: 输入:“db.user.find().help();”查看find()的帮助信息 2.基本命令: 连接/切换数据库       例如:u

Elasticsearch入门教程(二):Elasticsearch核心概念

原文:Elasticsearch入门教程(二):Elasticsearch核心概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbirdbest/article/details/79200022 基本概念介绍 Elasticsearch是一个基于Lucene构建的开源.分布式.RESTful的搜索引擎,能够实现近实时(NRT)搜索,稳定.可靠.安装方便.Elasticsearch 不

C语言快速入门教程(二)

C语言快速入门教程(二) C语言的基本语法 本节学习路线图: 引言: C语言,顾名思义就是一门语言,可以类比一下英语; 你要说出一个英语的句子需要:  单词  +  语法!  将单词按照一定的语法拼凑起来就成了一个英语句子了; C语言同样是这样,只不过单词可以理解为一些固定的知识点,而语法可以理解为算法(可以理解为解决问题的方法) 在这一节中我们就对固定知识点中的语言描述与数据存储进行解析! 1.C语言的基本元素 1.1  标识符 什么是标识符? 答:在C语言中,符号常量,变量,数组,函数等都需

DataVeryLite入门教程(二) Entity篇

DataVeryLite 是基于.net 4.0的数据库持久化ORM框架. 目前支持的数据库有Sqlserver,Mysql,Oracle,Db2,PostgreSql,Sqlite和Access. 最好先阅读DataVeryLite入门教程(一) 配置篇,然后再阅读本篇.如果你觉得麻烦也可以跳过. Entity是ORM中的核心对象之一,一个继承Entity的对象对应于数据库中的一个表. Entity提供丰富的API对表中的单条数据进行操作. 比如根据id或其他条件,加载,删除,插入,更新和部分

Spring Cloud 入门教程(二): 配置管理

使用Config Server,您可以在所有环境中管理应用程序的外部属性.客户端和服务器上的概念映射与Spring Environment和PropertySource抽象相同,因此它们与Spring应用程序非常契合,但可以与任何以任何语言运行的应用程序一起使用.随着应用程序通过从开发人员到测试和生产的部署流程,您可以管理这些环境之间的配置,并确定应用程序具有迁移时需要运行的一切.服务器存储后端的默认实现使用git,因此它轻松支持标签版本的配置环境,以及可以访问用于管理内容的各种工具.很容易添加

jQuery 入门教程(二): 基本语法

学习jQuery之前需要你有下面几个方面的基本知识 HTML CSS JavaScript jQuery 的基本语法 $(selector).action() $ 符合定义这是一个jQuery语句 (selector) 用来选择某个HTML元素,其语法和CSS的selector语法一样. action() 定义操作该HTML元素的方法. 比如: $(this).hide() – 隐藏当前元素. $("p").hide() – 隐藏所以 <p> 元素. $(".te

MongoDB入门学习(二):MongoDB的基本概念和数据类型

上一篇讲了MongoDB的安装和管理,其中涉及到了一些概念,数据结构还有一些API的调用,不知道的没关系,其实很简单,这篇会简单介绍一下. 1.文档 文档是MongoDB的核心概念,多个键值对有序的放在一起就是一个文档,文档是MongoDB存储数据最基本的数据结构.对MongoDB都是以文档的形式来操作的,使用了一种类似JSON的二进制BSON数据格式,对API的调用都是传的文档参数.每种编程语言都有标示文档的数据结构,比如java的map,lua的table,python的dict等等,但是都

MongoDb 入门教程

MongoDb 入门教程 目录 MongoDb的基本数据结构 安装MongoDb服务器 连接MongoDb服务器 MongoDb创建数据库 MongoDb创建表 MongoDb插入数据 MongoDb查询数据 范围操作符 AND操作符 OR操作符 排序 聚合 MongoDb更新数据 MongoDb删除数据 常用的DDL命令 MongoDb图形化工具 总结 参考资料 MongoDb 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 它是可扩展的高性能数

Git的入门教程&lt;二&gt;

Git 的入门教程<二> 4> git远程仓库的使用 我们在使用git进行代码管理的时候,协同办公,需要一个24小时不间断的隐形同事,此时,如果在局域网内,则直接开一台局域网内的24小时开机运行的机器就可以,但是如果在homework的时候就需要这个24小时运行的机器拥有独立的外网IP,这样消耗就比较大,幸好,网上有一个github,提供给我们一个免费的仓库,让我们可以在同事之前推送代码,下面介绍github的使用. 4.1 github的使用 首先 登录github的官网: https

BootStrap入门教程 (二)

上讲回顾:Bootstrap的手脚架(Scaffolding)提供了固定(fixed)和流式(fluid)两种布局,它同时建立了一个宽达940px和12列的格网系统. 基于手脚架(Scaffolding)之上,Bootstrap的基础CSS(Base CSS)提供了一系列的基础Html页面要素,旨在为用户提供新鲜.一致的页面外观和感觉.本文将主要深入讲解排版(Typography),表格(Table),表单(Forms),按钮(Buttons)这四个方面的内容. 排版 (Typography),