条件匹配

匹配文档

到目前为止,我们要么查找单个文档,要么返回整个字符集合。对于查找,我们使用了DOCUMENT()函数,这意味着我们只能通过它们的key或ID来查找文档。

为了实现更复杂的查询,AQL提供了FILTER操作,它使我们能够为文档制定任意条件来匹配。

平等条件

FOR c IN Characters

FILTER c.name == "Ned"

RETURN c

过滤条件如下所示:“ 字符文档的属性名称必须等于字符串Ned ”。如果条件适用,则返回字符文档。这适用于任何属性:

FOR c IN Characters

FILTER c.surname == "Stark"

RETURN c

范围条件

严格相等是我们可以说明的一个可能的条件。然而,我们可以制定许多其他条件。例如,我们可以要求所有年轻人:

FOR c IN Characters

FILTER c.age >= 13

RETURN c.name

[

"Joffrey",

"Tyrion",

"Samwell",

"Ned"]

13岁或13岁以上的每个Characters都被返回(在示例中只是他们的名字)。我们可以通过将运算符更改为小于等于,并使用对象语法来定义要返回的属性的子集,从而返回年龄小于13的所有Characters的名称和年龄 :

FOR c IN Characters

FILTER c.age < 13

RETURN { name: c.name, age: c.age }

[

{ "name": "Tommen", "age": null },

{ "name": "Arya", "age": 11 },

{ "name": "Roose", "age": null },

...

]

您可能会注意到它返回了30个Characters的名称和年龄,大多数年龄都是null。这是因为如果查询一个属性,但是这个属性在文档中又不存在,则会返回一个null值。并且NULL与数字比较低(参见类型和值顺序)。因此,符合年龄标准C.age<13(NULL<13)

多个条件

为了不让文档在没有年龄属性的情况下通过过滤器,我们可以添加第二个条件:

FOR c IN Characters

FILTER c.age < 13

FILTER c.age != null

RETURN { name: c.name, age: c.age }

[

{ "name": "Arya", "age": 11 },

{ "name": "Bran", "age": 10 }

]

这可以同样用布尔AND运算符编写,如下所示:

FOR c IN Characters

FILTER c.age < 13 AND c.age != null

RETURN { name: c.name, age: c.age }

第二个条件也可以c.age > null。

替代条件

如果您希望文档满足一个或另一个条件,也可能针对不同的属性,请使用OR:

FOR c IN Characters

FILTER c.name == "Jon" OR c.name == "Joffrey"

RETURN { name: c.name, surname: c.surname }

[

{ "name": "Joffrey", "surname": "Baratheon" },

{ "name": "Jon", "surname": "Snow" }

]

排序和限制

限制结果数量

某些情况下,我们并不需要返回所有的数据。在这些情况下,我们可以通过LIMIT()操作限制文档数量:

FOR c IN Characters

LIMIT 5

RETURN c.name

[

"Joffrey",

"Tommen",

"Tyrion",

"Roose",

"Tywin"

]

LIMIT后面跟着一个最大文档数的数字。还有第二种语法,它允许您跳过一定数量的记录并返回下一个n文档:

FOR c IN Characters

LIMIT 2, 5

RETURN c.name

[

"Tyrion",

"Roose",

"Tywin",

"Samwell",

"Melisandre"

]

看看第二个查询是如何跳过前两个名字并返回下一个五个(两个结果都是Tyron,RoSE和Tywin)。

按名称分类

查询返回的匹配记录的顺序基本上是随机的。要按照定义的顺序返回它们,我们可以添加一个 SORT()操作。

FOR c IN Characters

SORT c.name

LIMIT 10

RETURN c.name

[

"Arya",

"Bran",

"Brienne",

"Bronn",

"Catelyn",

"Cersei",

"Daario",

"Daenerys",

"Davos",

"Ellaria"

]

我们可以按照DESC降序反转排序顺序:

FOR c IN Characters

SORT c.name DESC

LIMIT 10

RETURN c.name

[

"Ygritte",

"Viserys",

"Varys",

"Tywin",

"Tyrion",

"Tormund",

"Tommen",

"Theon",

"The High Sparrow",

"Talisa"

]

第一种是升序,这是默认的顺序。因为它是默认的,所以不需要明确地声明。

按多个属性排序

假设我们想按姓氏排序。许多Characters有共同的姓氏。姓氏相同的字符之间的结果顺序未定义。我们可以先按姓氏排序,然后按名称确定顺序:

FOR c IN Characters

FILTER c.surname

SORT c.surname, c.name

LIMIT 10

RETURN {

surname: c.surname,

name: c.name

}

[

{ "surname": "Baelish", "name": "Petyr" },

{ "surname": "Baratheon", "name": "Joffrey" },

{ "surname": "Baratheon", "name": "Robert" },

{ "surname": "Baratheon", "name": "Stannis" },

{ "surname": "Baratheon", "name": "Tommen" },

{ "surname": "Bolton", "name": "Ramsay" },

{ "surname": "Bolton", "name": "Roose" },

{ "surname": "Clegane", "name": "Sandor" },

{ "surname": "Drogo", "name": "Khal" },

{ "surname": "Giantsbane", "name": "Tormund" }

]

排序前使用FILTER c.surname是为了限制返回结果中没有surname为null的数据。

按年龄分类

排序还可以通过数字值来确定,例如年龄:

FOR c IN Characters

FILTER c.age

SORT c.age

LIMIT 10

RETURN {

name: c.name,

age: c.age

}

[

{ "name": "Bran", "age": 10 },

{ "name": "Arya", "age": 11 },

{ "name": "Sansa", "age": 13 },

{ "name": "Jon", "age": 16 },

{ "name": "Theon", "age": 16 },

{ "name": "Daenerys", "age": 16 },

{ "name": "Samwell", "age": 17 },

{ "name": "Joffrey", "age": 19 },

{ "name": "Tyrion", "age": 32 },

{ "name": "Brienne", "age": 32 }

]

应用FILTER c.age以避免没有年龄属性的文档。

ArangoDB高级查询(一)相关推荐

  1. ArangoDB高级教程——ArangoDB3.3.19整合Springboot2.1.0

    ArangoDB安装见 https://blog.csdn.net/w690333243/article/details/83626273 Springboot使用2.1.0 moven项目中 pom ...

  2. jqgrid自定义列表开发=》实现高级查询

    标题已指出本文要说的三件事,首先是主角jqgrid,将应用在自定义列表中,重点介绍如何实现高级查询. 使用jqgrid实现自定义列表分为两大步骤,首先是要根据业务完成jqgrid的对象定义,即列表的描 ...

  3. SQL高级查询(层次化查询,递归)

    SQL 高级查询 前面我们写了一下 SQL 的极简入门,今天来说点高级查询.没看到的朋友可以点击下面链接查看. 1 小时 SQL 极速入门(一) 1 小时 SQL 极速入门(二) 1 小时 SQL 极 ...

  4. ylb:SQL 表的高级查询-多表连接和子查询

    ylbtech-SQL Server: SQL Server-表的高级查询-多表连接和子查询 SQL Server 表的高级查询-多表连接和子查询. 1,ylb:表的高级查询-多表连接和子查询 返回顶 ...

  5. MySQL简单快速入门 (三)高级查询——JEPLUS软件快速开发平台

    03.SQL高级查询_分组: 1).需求:一条查询,查询出每种商品的最高价格 2).分组的命令:group by 分组字段 3).实现上例: select category_id,max(price) ...

  6. MySQL高级查询语句

    高级查询: 一:多表连接 1.select Info.Code,Info.Name,Nation.Name from Info,Nation where Info.Nation = Nation.Co ...

  7. 【JEECG技术文档】JEECG高级查询构造器使用说明

    功能介绍   高级查询构造器支持主子表联合查询,查询出更精确的数据. 要使用高级查询构造器需要完成以下步骤: 1. 在高级查询管理配置主子表信息. 2. 配置完后在JSP页面DataGrid标签上添加 ...

  8. oracle将查询结果声明为伪表,Oracle查询操作(增删改查,伪表,高级查询)实例讲解...

    SQL查询操作:增删改查 一.SQL操作符 算术操作符 + - * / 比较操作符 = != < > <= >= BETWEEN--AND IN LINK IS NULL 逻辑 ...

  9. iBATIS In Action:使用高级查询技术(一)

    可以考虑根据对象的关系(关联)来定义数据模型,然后使用iBATIS将它们一起加载.例如,如果在数据库中,Account记录对应着相关的Order记录,而Order又对应着相关的OrderItem记录, ...

  10. Python之Pandas:利用Pandas函数实现对表格文件的查之高级查询(类似sql,分组查询等)之详细攻略

    Python之Pandas:利用Pandas函数实现对表格文件的查之高级查询(类似sql,分组查询等)之详细攻略 目录 利用Pandas函数实现对表格文件的查之高级查询(类似sql) 1.分组查询

最新文章

  1. 【camera-radar】相机-毫米波雷达联合标定方案介绍+实现
  2. 轻雀协作客户最佳实践之A站
  3. python 字符串 删除 空格 换行符
  4. RTT 动态线程和静态线程
  5. Windows把内存变成快速虚拟硬盘
  6. 用ram实现寄存器堆_Verilog如何实现低功耗设计?
  7. Apache配置(转载)
  8. JVM架构和GC垃圾回收机制详解
  9. rpm 安装RabbitMQ 3.7.24版本-User can only log in via localhost
  10. php输出excel表格乱码和第一个0不显示的解决方法(详细)
  11. LINQ to SQL自定义映射表关系(1:N or 1:1)
  12. C++时间类的运算符重载
  13. 安装MySQL数据库无法启动服务的完美解决办法
  14. 首张数字人民币机票订单诞生 上海-深圳
  15. Atitit 人工智能声音处理乐器总类以及midi规范的标示 目录 1. Atitit 乐器分类 打击乐器 1 1.1. 1.1. 打击乐器(各种鼓 三角铁等 1 2 1.2. 1.2. 管乐器
  16. 解决windows10下总是很快进入睡眠问题
  17. 使用python 多进程进行基于websocket 的实时视频流处理
  18. SDCC 2017·深圳站八大不容错过的理由
  19. Python黑白转换程序
  20. poi设置表格内容水平垂直居中

热门文章

  1. java压缩图片thumbnails_Java压缩图片、减小图片文件体积大小,Thumbnails使用教程...
  2. python怎么读取pdf为文本_Python使用PDFMiner解析PDF
  3. mysql 查询结果作为参数_如何将数据库查询出来的字段值作为参数传入下一个请求中...
  4. 微信小程序——视图层
  5. 深度学习的黑魔法防御术:恶意样本(Adversarial Example) 的防御策略综述
  6. Asp中显示%百分比函数FormatPercent的使用
  7. oracle使用with as 提升查询效率
  8. linux BT面板的安装
  9. MATLA图片清晰度调整
  10. Error while building/deploying project QTtest (kit: Desktop Qt 5.8.0 MinGW 32bit)