ArangoDB(三)

ArangoDB

数组运算符
  • 数组扩展
  • 为了轻松地从数组中的所有元素访问命名属性,AQL [*]为数组变量扩展提供了快捷运算符。
  • 使用[ * ] 带有数组变量的运算符将遍历数组中的所有元素,从而允许访问每个元素的特定属性。要求扩展变量是一个数组。 [ * ] 运算符的结果又是一个数组。
  • 案例一:
    为了演示阵列扩展运算符,让我们继续使用以下三个示例用户文档:
[
  {
    "name": "john",
    "age": 35,
    "friends": [
      { "name": "tina", "age": 43 },
      { "name": "helga", "age": 52 },
      { "name": "alfred", "age": 34 }
    ]
  },
  {
    "name": "yves",
    "age": 24,
    "friends": [
      { "name": "sergei", "age": 27 },
      { "name": "tiffany", "age": 25 }
    ]
  },
  {
    "name": "sandra",
    "age": 40,
    "friends": [
      { "name": "bob", "age": 32 },
      { "name": "elena", "age": 48 }
    ]
  }
]

通过[*]操作符,可以轻松查询每个用户的朋友姓名:

FOR u IN users
  RETURN { name: u.name, friends: u.friends[*].name }

这将产生:

[
  { "name" : "john", "friends" : [ "tina", "helga", "alfred" ] },
  { "name" : "yves", "friends" : [ "sergei", "tiffany" ] },
  { "name" : "sandra", "friends" : [ "bob", "elena" ] }
]

这是较长的,语义上等效的查询的快捷方式:

FOR u IN users
RETURN { name: u.name, friends: (FOR f IN u.friends RETURN f.name) }


- 阵列收缩

>为了在嵌套数组中折叠(或展平)结果,AQL提供了[ ** ] 运算符。它的工作方式类似于[ * ]运算符,但还会折叠嵌套数组。

我们可以按如下方式扩展上面的查询,并仍然创建相同的嵌套结果:

```java
RETURN (
  FOR u IN users RETURN u.friends[*].name
)

现在[**],在查询结束时附加运算符…

RETURN (
  FOR u IN users RETURN u.friends[*].name
)[**]
  • 内联表达式
  • 可以在迭代数组时过滤元素,限制返回元素的数量并使用当前数组元素创建投影。此简写形式不支持排序。

嵌套数字和数组收缩的示例:

LET arr = [ [ 1, 2 ], 3, [ 4, 5 ], 6 ]
RETURN arr[**]
// RETURN arr[**  FILTER CURRENT % 2 == 0]

所有偶数都以平面数组返回:

[
  [ 2, 4, 6 ]
]
MERGE(),collection之间的document关联
  • 案例二

假如现在让student的level字段和teacher中的数据相关联

  • step1 各自创建集合
    在这里插入图片描述
  • step2 添加数据
LET data = [
    { "name": "Robert", "sex": "男", "age": 19,"level":["A","B","C","D"]},
    { "name": "Jaime", "sex": "女", "age": 20,"level":["A","B","C"]}
]
FOR d IN data
    INSERT d INTO student    
let data = [
    { "_key": "A", "en": "strong", "de": "stark" },
    { "_key": "B", "en": "weak", "de": "dark" }
]
FOR d IN data
    INSERT d INTO teacher
  • step3 只关注level字段 与 en关联,并且让其显示
FOR c IN student
RETURN MERGE(c,{ level: DOCUMENT("teacher", c.level)[*].en })
  • step4 level字段和en,de关联
FOR c IN student
RETURN MERGE(c, { level: (for t in DOCUMENT("teacher", c.level) RETURN {en:t.en,de:t.de})} )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值