您当前的位置: 首页 >  mongodb

寒冰屋

暂无认证

  • 2浏览

    0关注

    2286博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

MongoDB教程——第2天

寒冰屋 发布时间:2021-08-04 10:52:35 ,浏览量:2

目录

介绍

背景

本文的要点将是

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

关注
打赏
1665926880
查看更多评论
立即登录/注册

微信扫码登录

0.0857s