DocumentDB是Microsoft在Azure上运行的最新NoSQL文档数据库平台.在本教程中,我们将学习使用DocumentDB支持的特殊版本的SQL查询文档的所有内容.
NoSQL文档数据库
DocumentDB是微软的最新版本NoSQL文档数据库,当我们说NoSQL文档数据库时,NoSQL和文档数据库究竟是什么意思?
SQL表示结构化查询语言,它是关系数据库的传统查询语言. SQL通常等同于关系数据库.
将NoSQL数据库视为非关系数据库确实更有帮助,因此NoSQL实际上意味着非关系.
有不同类型的NoSQL数据库,包括键值存储,如 :
Azure表存储
基于列的存储,如Cassandra
图形数据库,如NEO4
文档数据库,如MongoDB和Azure DocumentDB
为什么选择SQL语法?
这一开始听起来很奇怪,但在DocumentDB这是一个NoSQL数据库,我们使用SQL进行查询.如上所述,这是一个以JSON和JavaScript语义为基础的SQL的特殊版本.
SQL只是一种语言,但它也是一种非常流行的语言,富有表现力.因此,使用SQL的一些方言肯定似乎是一个好主意,而不是提出一种全新的表达查询的方式,如果你想从你的数据库中获取文档,我们需要学习.
SQL是为关系数据库设计的,而DocumentDB是非关系文档数据库. DocumentDB团队实际上已经为文档数据库的非关系世界调整了SQL语法,这就是在JSON和JavaScript中生成SQL的意思.
该语言仍然是熟悉的SQL,但语义都基于schemafree JSON文档而不是关系表.在DocumentDB中,我们将使用JavaScript数据类型而不是SQL数据类型.我们将熟悉SELECT,FROM,WHERE等,但是JavaScript类型仅限于数字和字符串,对象,数组,布尔值和null远远少于广泛的SQL数据类型.
同样,表达式被评估为JavaScript表达式而不是某种形式的T-SQL.例如,在非规范化数据的世界中,我们不处理行和列,而是处理包含嵌套数组和对象的分层结构的无模式文档.
SQL是如何工作的?
DocumentDB团队以几种创新的方式回答了这个问题.其中很少列出如下 :
首先,假设您没有更改默认行为以自动索引每个在文档中的属性,您可以在查询中使用点分表示法来导航到任何属性的路径,无论它在文档中的嵌套程度有多深.
您还可以执行文档内连接,其中嵌套数组元素与文档中的父元素连接的方式非常类似于在关系世界中两个表之间执行连接的方式.
您的查询可以按原样从数据库返回文档,或者您可以根据所需的文档数据投影任何自定义JSON形状.
DocumentDB中的SQL支持许多常见的运算符,包括 :
算术和按位运算
AND和OR逻辑
平等和范围比较
字符串连接
查询语言还支持许多内置函数.