MongoDB教程——第2天
目录
介绍
背景
本文的要点将是
MongoDB是Schema less
$exists
$type
MongoDB中的数据类型
$in, $all和$nin
嵌入式文档和点符号
介绍
欢迎来到MongoDB教程的第2天。这是MongoDB教程系列的第二部分。在本文的第一部分中,我们涵盖并学习了MongoDb的一些基本查询和操作。在上一篇文章中,我们将一些SQL查询与MongoDB查询进行了比较。如果有人不熟悉MongoDB,那么在此之前阅读我之前的文章会很好。在本文中,我们将看到一些mongodb特定的查询。
你可以在这里阅读我之前的文章。
以下是所有三个部分的链接:
- Mongo DB教程及SQL与Mongo DB查询的映射
- MongoDB 教程 - 第 2 天
- MongoDB 教程 - 第 3 天(性能 - 索引)
背景
我们在本文的第一部分介绍了MongoDB的以下主题:
- No-Sql介绍(不同类型的数据库归于No-SQL)
- 如何在您的机器上安装和设置MongoDB。
- Robomongo(MongoDB开源管理工具)介绍
- MongoDb术语
- 如何在MongoDB中插入文档
- 如何在MongoDB中选择一个文档
- Where子句,大于和小于
- like,逻辑与和逻辑或
- MongoDb中的in运算符,MongoDB中的记录计数和排序
- MongoDB中的更新、删除、移除和删除
- MongoDB中的Top、Distinct和Backup
我上一篇文章中MongoDB的一些关键点:
- MongoDb是一个文档存储数据库。
- MongoDB是 chema less
- MongoDB以Json格式存储数据(我们称之为BSON(Binary JSON))
- JSON文档将数据存储在键值对中,如{“X”:1,”Y”:2,”Z”:3}
因此,是时候从我们可以在MongoDB中使用的数据类型开始介绍更多mongodb概念了。
本文的要点将是
- MongoDB的Schema Less行为
- $exists
- $type
- MongoDB的不同数据类型
- $in,$all和$nin
- 嵌入式文档和嵌入式文档查询
MongoDB是Schema less
我们总是谈论MongoDB Schema Less行为,这是MongoDB现在如此流行的关键行为。所以让我们少了解一下Schema的含义。
假设我们 的Test数据库中有一个名为Employee的集合(请阅读我之前的文章以了解如何创建数据库和集合,MongoDBDatabase如下所示):
在员工集合中插入文档:
db.Employee.insert({Name:"Vijay",Age:30,Email:"VijayRana1091@gmail.com"})
在上面的文档中,我们有Name, Email 是String 和Age 是Number。
现在让我再插入一个文档,这次我将再添加一个名为address。
db.Employee.insert({Name:"Vijay",Age:30,Email:"VijayRana1091@gmail.com",Address:"Delhi"})
结果如下:
现在只考虑RDMS。在RDMS的情况下,我们必须先更改表以添加新列,但在MongoDB的情况下,我们不需要添加新列,因为MongoDB中的所有文档都可以具有不同的架构。
让我在Employee 集合中再插入一个文档。
db.Employee.insert
({Name:"Vijay",Age:30,Email:"VijayRana1091@gmail.com",Address:"Delhi",Interest:["Cricket","Music"]
})
哇,我们也可以在MongoDB的文档中插入Array。实际上,JSON中有两种基本结构:
- Array:事物列表在项目列表中表示[……..]
- Dictionaries: 关联映射{key:Value}
所以现在,我们很好地使用了Schema的概念。
就像上面的例子在某个文档中,我们可以有一个Address 列,并且在同一个集合中的另一个文档中,没有必要有相同的列。简而言之,在一个集合中,不同的文档可以有不同的列/架构。但是假设您想找出Address列存在的集合中的所有文档。在MongoDB中,为这样的查询我们有$exist。
$exists
我们有Employee以下集合:
在下面的上述集合中,假设我有一些我们没有的Address文档和一些我们有Address列和其他列的文档。现在假设我想检索所有Address存在的记录。
让我在Employee集合中再插入一个文档,如下所示:
db.Employee.insert
({Name:111,Age:30,Email:"VijayRana1091@gmail.com",Address:"Delhi"
})
这次,我在Name列中插入了一个整数值。是的,我们也可以这样做。这是Schema less 的自然魔力。我可以在任何列中插入任何类型的值。
但是假设我想找出name在字符串中的所有文档,我们将如何找出?
为了这个我们有$type。
$type
到目前为止,我们在我的employee集合中有以下记录。我有3个文件,其中有name是一个string文件,还有1个文件,其中name是数字的。
现在,我要找出所有的文件,其中name是string:
在mongodb中,我们使用2表示 string,1表示number。下表显示了所有数据类型的完整列表。
我们可以在$type中使用下面的数据类型。
MongoDB中的数据类型
MongoDB中一些常用的数据类型如下:
数据类型 |
数字 |
意义 |
Double |
1 |
对应float值 |
String |
2 |
String是最常用的DataType。在mongodb中,string必须是UTF-8有效的。 |
Object |
3 |
对于嵌入文档 |
Array |
4 |
将列表或多个值合并为一个键 |
Binary Data |
5 |
存储二进制数据 |
Undefinded |
6 |
|
Object Id |
7 |
存储文档的ID |
Boolean |
8 |
存储布尔 ( true/ false) 值 |
Date |
9 |
存储日期和时间 |
Null |
10 |
存储一个Null值 |
正则表达式 |
11 |
存储正则表达式 |
32位整数 |
16 |
存储32位整数 |
时间戳 |
17 |
存储日期和时间 |
64位整数 |
18 |
存储64位整数 |
现在下一步是什么?让我再插入一些记录
db.Employee.insert
({Name:"Preeti",Age:26,Email:"Preeti@gmail.com",Address:"Delhi",Interest:["cooking","Music"]
})db.Employee.insert
({Name:"Ajay",Age:26,Email:"Preeti@gmail.com",Address:"Delhi",Interest:["Driving","Music"]
})
现在假设我们要找出所有感兴趣的文档,即Music,即这次我们要在一个数组中进行搜索。
我们可以在数组内部以及以下进行搜索:
db.Employee.find({Interest : "Music"})
所以我们可以说我们的匹配在MongoDb中是多态的。
$in, $all和$nin
如果我们想找出我们对烹饪和音乐都感兴趣的所有文档,那么我们可以使用$all:
db.Employee.find({Interest : {$all:["cooking","Music"]}})
如果我们想找出Interest包含音乐或驾驶的所有文档,那么我们将使用$in运算符:
db.Employee.find({Interest : {$in:["Driving","Music"]}})
如果我们想找出所有兴趣不是烹饪的记录,那么我们将使用$nin如下:
db.Employee.find({Interest : {$nin:["cooking"]}})
上面的查询将返回Interest未烹饪的所有文档。
嵌入式文档和点符号
我们也可以在MongoDB中嵌入文档,如下所示:
db.Employee.insert
({Name:{firstName:"Preeti",LastName:"Rana"},Age:26,Email:"Preeti@gmail.com",Address:"Delhi",Interest:["cooking","Music"]
})db.Employee.insert
({Name:{firstName:"Vijay",LastName:"Rana"},Age:30,Email:"Vijay@gmail.com",Address:"Delhi",Interest:["cooking","Music"]
})
要在嵌入式文档中指定条件,我们可以使用点表示法,如下所示:
db.Employee.find({"Name.firstName":"Vijay"})
上面的查询将搜索所有在Name中firstName作为Vijay 的文档。
在本系列的下一篇文章中,我将介绍Aggregation(groupBy),Indexes,$Text和$lookup。所以请继续关注。
https://www.codeproject.com/Articles/1089786/MongoDB-Tutorial-Day
MongoDB教程——第2天相关推荐
- 【MongoDB】NoSQL Manager for MongoDB 教程(基础篇)
前段时间,学习了一下mongodb,在客户端工具方面,个人认为 NoSQL Manager for MongoDB 是体验比较好的一个,功能也较齐全.可惜在找教程的时候,发现很难找到比较详细的教程,也 ...
- 阿里云CentOS6.3 安装MongoDB教程
阿里云CentOS6.3 安装MongoDB教程 安装说明 系统环境:Centos-6.3 安装软件:mongodb-linux-x86_64-2.2.2.tgz 下载地址:http://www.mo ...
- MongoDB教程-使用Node.js从头开始CRUD应用
In this MongoDB Tutorial from NoobCoder, you will learn how to use MongoDB to create a complete Todo ...
- MongoDB 教程索引 (附有视频)
MongoDB 教程索引 MongoDB 教程一: 安装和使用 (Mongodb启动命令mongod参数说明) MongoDB 教程二: 添加, 删除,查询 shell命令 MongoDB 教程三: ...
- MongoDB 教程八(结语): 一网打尽当下NoSQL类型、适用场景及使用公司
在过去几年,关系型数据库一直是数据持久化的唯一选择,数据工作者考虑的也只是在这 些传统数据库中做筛选,比如SQL Server.Oracle或者是MySQL.甚至是做一些默认的选择,比如使用.NET的 ...
- MongoDB 教程七: MongoDB和PHP结合开发
视频:MongoDB 教程七: MongoDB和PHP结合开发 Linux上安装 MongoDB PHP扩展 在终端上安装 你可以在linux中执行以下命令来安装MongoDB 的 PHP 扩展驱动 ...
- MongoDB 教程六: MongoDB管理:数据导入导出,数据备份恢复及用户安全与认证
视频地址:MongoDB 教程六: MongoDB管理:数据导入导出,数据备份恢复及用户安全与认证 MongoDB数据库备份与恢复 一.备份 先介绍下命令语法: mongodump -h dbhost ...
- MongoDB 教程五: MongoDB固定集合和性能优化 (索引Indexes, 优化器, 慢查询profile)
mongodb索引详解(Indexes) 索引介绍 索引在mongodb中被支持,如果没有索引,mongodb必须扫描每一个文档集合选择匹配的查询记录.这样扫描集合效率并不高,因为它需要mongod进 ...
- MongoDB 教程五: MongoDB固定集合和性能优化
MongoDB 固定集合(Capped Collections) MongoDB 固定集合(Capped Collections)是性能出色且有着固定大小的集合,对于大小固定,我们可以想象其就像一个环 ...
- MongoDB 教程番外篇之添加用户及设置用户权限 ( Rockmongo登陆设置 )
继上一篇 MongoDB 教程番外篇之管理工具: Rockmongo ,MongoDB 缺省是没有设置鉴权的,业界大部分使用 MongoDB 的项目也没有设置访问权限.这就意味着只要知道 MongoD ...
最新文章
- 通信专业学python有用吗-通信算法工程师需要学python吗
- tp5,thinkphp5,隐藏index.php,隐藏入口文件
- arch模型的思路_ARCH模型
- 使用 BOOST_PROTO_DEFINE_OPERATORS 使用非原型类型 std::vector<> 对表达式进行原型化的示例
- NetPayClient for PHP使用说明
- Servlet读取文件的最好的方式
- P1616 疯狂的采药(洛谷,动态规划递推,完全背包)
- C语言与汇编语言的区别
- 苏州大学计算机组成题库11,苏州大学计算机组成题库(范文).doc
- HTTP之Web服务器
- JVM(二):垃圾回收
- CSS之立方体绘画步骤
- PTA程序设计第六周
- Unity BMFont自定义字体
- 深度学习标签制作简易Python代码
- CPRI之TDD开关控制字
- Ubuntu16.04安装谷歌浏览器
- iOS iPhone X底部设置高度 白色底部显示
- 最近微信上很火的小游戏【壹秒】android版——开发分享
- 小米手机升级后便签内容没了如何找回
热门文章
- 在linux下进行嵌入式系统设计,一种应用于测控系统的基于Linux的嵌入式系统的设计...
- crowd counting_[crowd_counting]-SFANet-arxiv1902
- android http 慢,android httpurlconnection數據連接速度慢
- suse linux vnc 桌面号,在SUSE Linux下安装VNC的方法
- java中runnable_Java中Runnable和Thread的区别
- 知云文献翻译打不开_比有道更好用的英文文献阅读翻译神器免费啦
- 配色方案专辑上线,宠溺设计师的好素材!
- 干货 · UI设计|APP引导页面可临摹素材
- 流程图和布局套件模板
- word文档服务器多人打开后就损坏,打开word文档损坏