目录

介绍

背景

本文的要点将是

MongoDB是Schema less

$exists

$type

MongoDB中的数据类型

$in, $all和$nin

嵌入式文档和点符号


介绍

欢迎来到MongoDB教程的第2天。这是MongoDB教程系列的第二部分。在本文的第一部分中,我们涵盖并学习了MongoDb的一些基本查询和操作。在上一篇文章中,我们将一些SQL查询与MongoDB查询进行了比较。如果有人不熟悉MongoDB,那么在此之前阅读我之前的文章会很好。在本文中,我们将看到一些mongodb特定的查询。

你可以在这里阅读我之前的文章。

以下是所有三个部分的链接:

  1. Mongo DB教程及SQL与Mongo DB查询的映射
  2. MongoDB 教程 - 第 2 天
  3. MongoDB 教程 - 第 3 天(性能 - 索引)

背景

我们在本文的第一部分介绍了MongoDB的以下主题:

  1. No-Sql介绍(不同类型的数据库归于No-SQL)
  2. 如何在您的机器上安装和设置MongoDB。
  3. Robomongo(MongoDB开源管理工具)介绍
  4. MongoDb术语
  5. 如何在MongoDB中插入文档
  6. 如何在MongoDB中选择一个文档
  7. Where子句,大于和小于
  8. like,逻辑与和逻辑或
  9. MongoDb中的in运算符,MongoDB中的记录计数和排序
  10. MongoDB中的更新、删除、移除和删除
  11. MongoDB中的Top、Distinct和Backup

我上一篇文章中MongoDB的一些关键点:

  1. MongoDb是一个文档存储数据库。
  2. MongoDB是 chema less
  3. MongoDB以Json格式存储数据(我们称之为BSON(Binary JSON))
  4. JSON文档将数据存储在键值对中,如{“X”:1,”Y”:2,”Z”:3}

因此,是时候从我们可以在MongoDB中使用的数据类型开始介绍更多mongodb概念了。

本文的要点将是

  1. MongoDB的Schema Less行为
  2. $exists
  3. $type
  4. MongoDB的不同数据类型
  5. $in,$all和$nin
  6. 嵌入式文档和嵌入式文档查询

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中有两种基本结构:

  1. Array:事物列表在项目列表中表示[……..]
  2. 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天相关推荐

  1. 【MongoDB】NoSQL Manager for MongoDB 教程(基础篇)

    前段时间,学习了一下mongodb,在客户端工具方面,个人认为 NoSQL Manager for MongoDB 是体验比较好的一个,功能也较齐全.可惜在找教程的时候,发现很难找到比较详细的教程,也 ...

  2. 阿里云CentOS6.3 安装MongoDB教程

    阿里云CentOS6.3 安装MongoDB教程 安装说明 系统环境:Centos-6.3 安装软件:mongodb-linux-x86_64-2.2.2.tgz 下载地址:http://www.mo ...

  3. MongoDB教程-使用Node.js从头开始CRUD应用

    In this MongoDB Tutorial from NoobCoder, you will learn how to use MongoDB to create a complete Todo ...

  4. MongoDB 教程索引 (附有视频)

    MongoDB 教程索引 MongoDB 教程一: 安装和使用 (Mongodb启动命令mongod参数说明) MongoDB 教程二: 添加, 删除,查询 shell命令 MongoDB 教程三: ...

  5. MongoDB 教程八(结语): 一网打尽当下NoSQL类型、适用场景及使用公司

    在过去几年,关系型数据库一直是数据持久化的唯一选择,数据工作者考虑的也只是在这 些传统数据库中做筛选,比如SQL Server.Oracle或者是MySQL.甚至是做一些默认的选择,比如使用.NET的 ...

  6. MongoDB 教程七: MongoDB和PHP结合开发

    视频:MongoDB 教程七: MongoDB和PHP结合开发 Linux上安装 MongoDB PHP扩展 在终端上安装 你可以在linux中执行以下命令来安装MongoDB 的 PHP 扩展驱动 ...

  7. MongoDB 教程六: MongoDB管理:数据导入导出,数据备份恢复及用户安全与认证

    视频地址:MongoDB 教程六: MongoDB管理:数据导入导出,数据备份恢复及用户安全与认证 MongoDB数据库备份与恢复 一.备份 先介绍下命令语法: mongodump -h dbhost ...

  8. MongoDB 教程五: MongoDB固定集合和性能优化 (索引Indexes, 优化器, 慢查询profile)

    mongodb索引详解(Indexes) 索引介绍 索引在mongodb中被支持,如果没有索引,mongodb必须扫描每一个文档集合选择匹配的查询记录.这样扫描集合效率并不高,因为它需要mongod进 ...

  9. MongoDB 教程五: MongoDB固定集合和性能优化

    MongoDB 固定集合(Capped Collections) MongoDB 固定集合(Capped Collections)是性能出色且有着固定大小的集合,对于大小固定,我们可以想象其就像一个环 ...

  10. MongoDB 教程番外篇之添加用户及设置用户权限 ( Rockmongo登陆设置 )

    继上一篇 MongoDB 教程番外篇之管理工具: Rockmongo ,MongoDB 缺省是没有设置鉴权的,业界大部分使用 MongoDB 的项目也没有设置访问权限.这就意味着只要知道 MongoD ...

最新文章

  1. 通信专业学python有用吗-通信算法工程师需要学python吗
  2. tp5,thinkphp5,隐藏index.php,隐藏入口文件
  3. arch模型的思路_ARCH模型
  4. 使用 BOOST_PROTO_DEFINE_OPERATORS 使用非原型类型 std::vector<> 对表达式进行原型化的示例
  5. NetPayClient for PHP使用说明
  6. Servlet读取文件的最好的方式
  7. P1616 疯狂的采药(洛谷,动态规划递推,完全背包)
  8. C语言与汇编语言的区别
  9. 苏州大学计算机组成题库11,苏州大学计算机组成题库(范文).doc
  10. HTTP之Web服务器
  11. JVM(二):垃圾回收
  12. CSS之立方体绘画步骤
  13. PTA程序设计第六周
  14. Unity BMFont自定义字体
  15. 深度学习标签制作简易Python代码
  16. CPRI之TDD开关控制字
  17. Ubuntu16.04安装谷歌浏览器
  18. iOS iPhone X底部设置高度 白色底部显示
  19. 最近微信上很火的小游戏【壹秒】android版——开发分享
  20. 小米手机升级后便签内容没了如何找回

热门文章

  1. 在linux下进行嵌入式系统设计,一种应用于测控系统的基于Linux的嵌入式系统的设计...
  2. crowd counting_[crowd_counting]-SFANet-arxiv1902
  3. android http 慢,android httpurlconnection數據連接速度慢
  4. suse linux vnc 桌面号,在SUSE Linux下安装VNC的方法
  5. java中runnable_Java中Runnable和Thread的区别
  6. 知云文献翻译打不开_比有道更好用的英文文献阅读翻译神器免费啦
  7. 配色方案专辑上线,宠溺设计师的好素材!
  8. 干货 · UI设计|APP引导页面可临摹素材
  9. 流程图和布局套件模板
  10. word文档服务器多人打开后就损坏,打开word文档损坏