目录
介绍
背景
本文的要点将是
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的含义。
假设我们 的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