首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ArangoDB AQL更新奇怪的属性名称

ArangoDB AQL更新奇怪的属性名称
EN

Stack Overflow用户
提问于 2019-03-27 12:20:36
回答 1查看 76关注 0票数 0

在arangodb中,我有一个查找表,如下所示:

代码语言:javascript
复制
{
   '49DD3A82-2B49-44F5-A0B2-BD88A32EDB13' = 'Human readable value 1',
   'B015E210-27BE-4AA7-83EE-9F754F8E469A' = 'Human readable value 2',
   'BC54CF8A-BB18-4E2C-B333-EA7086764819' = 'Human readable value 3',
   '8DE15947-E49B-4FDC-89EE-235A330B7FEB' = 'Human readable value n'
}

我在一个单独的集合中有文档,如下面的“详细信息”所示,它们具有非人类可读的属性和值对:

代码语言:javascript
复制
{
    "ptype": {
      "name": "BC54CF8A-BB18-4E2C-B333-EA7086764819",
      "accuracy": 9.6,
      "details": {
        "49DD3A82-2B49-44F5-A0B2-BD88A32EDB13": "B015E210-27BE-4AA7-83EE-9F754F8E469A",
        "8DE15947-E49B-4FDC-89EE-235A330B7FEB": true,
      }
    }
}

我需要通过从查找表中查找人类可读的值来更新上面的文档,我还需要使用查找表中的可读属性名更新非人类可读的属性。

结果应该如下所示:

代码语言:javascript
复制
{
    "ptype": {
      "name": "Human readable value 3",
      "accuracy": 9.6,
      "details": {
        "Human readable value 1": "Human readable value 2",
        "Human readable value n": true,
      }
    }
}

因此,将使用查找表中的值更新ptype.name和ptype.details。

EN

回答 1

Stack Overflow用户

发布于 2019-03-27 15:13:52

这个查询应该可以帮助您了解如何使用LUT (查找表)。

AQL的一个很酷的特性是,您可以执行查找表查询,并使用LET命令将其值赋给一个变量,然后访问该查找表的内容。

看看这个例子是否有帮助:

代码语言:javascript
复制
LET lut = {
    'aaa' : 'Apples',
    'bbb' : 'Bananas',
    'ccc' : 'Carrots'
}

LET garden = [
    {
        'size': 'Large',
        'plant_code': 'aaa'
    },
    {
        'size': 'Medium',
        'plant_code': 'bbb'
    },
    {
        'size': 'Small',
        'plant_code': 'ccc'
    }
]

FOR doc IN garden
RETURN {
    'size': doc.size,
    'vegetable': lut[doc.plant_code]
}

此查询的结果为:

代码语言:javascript
复制
[
  {
    "size": "Large",
    "vegetable": "Apples"
  },
  {
    "size": "Medium",
    "vegetable": "Bananas"
  },
  {
    "size": "Small",
    "vegetable": "Carrots"
  }
]

您会注意到,在底部的查询中,实际上返回了数据,它通过使用doc.plant_code作为查找键来引用查找表。

这比在那里执行子查询的性能要高得多,因为如果您有100,000个花园文档,您不希望执行100,000次支持查询来确定plant_code的名称。

如果您希望确认可以在LUT中找到值,则可以选择使用以下格式的最终查询:

代码语言:javascript
复制
FOR doc IN garden
RETURN {
    'size': doc.size,
    'vegetable': (lut[doc.plant_code] ? lut[doc.plant_code] : 'Unknown')
}

这种返回vegetable值的可选方法使用内联if/then/else,如果在lut中找不到该值,它将返回值'Unknown‘。

希望这篇文章能对你的特殊用例有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55369764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档