标签: arangodb

在ArangoDb FOXX应用程序中创建边缘集合

有人可以帮助我解决以下问题.我正在ArangoDB中编写自定义FOXX应用程序,我需要创建边缘集合.随着db._create("example");我可以创建文档集,但我不知道如何改变它的类型.我试过db._create("example", {type: "edge"});但它不起作用.

文档中写了

集合具有在创建集合时由用户指定的类型.目前有两种类型:文档和边缘.默认类型是文档.

我怎样才能做到这一点?

arangodb

6
推荐指数
1
解决办法
988
查看次数

ArangoDB是否有分面搜索?

有谁知道ArangoDB是否支持分面搜索以及性能与其他支持它的产品(例如Solr,MarkLogic)或不支持它的产品(例如Mongo)相比如何?

在搜索网站,阅读文档以及搜索Google网上论坛后,我认为不会在任何地方进行讨论.

谢谢

arangodb

6
推荐指数
1
解决办法
498
查看次数

使用AQL在arangodb中进行聚合

我正在使用SUM()聚合函数在arangodb中尝试一个相当基本的任务.

这是一个工作查询,它​​返回正确的数据(虽然尚未汇总):

FOR m IN pkg_spp_RegMem
FILTER m.memberId == "40289"
COLLECT member = m.memberId INTO g
RETURN { "memberId" : member, "amount" : g[*].m[*].items }
Run Code Online (Sandbox Code Playgroud)

这将返回以下结果:

[
  {
    "memberId": "40289",
    "amount": [
      [
        {
          "amount": 50,
          "description": "some description"
        }
      ],
      [
        {
          "amount": 50,
          "description": "some description"
        },
        {
          "amount": 500,
          "description": "some description"
        },
        {
          "amount": 0,
          "description": "some description"
        }
      ],
      [
        {
          "amount": 0,
          "description": "some description"
        },
      ]
    ]
  }
]
Run Code Online (Sandbox Code Playgroud)

我使用Collect对结果进行分组,因为给定的memberId可能有多个'RegMem'对象.从查询/结果中可以看出,每个对象都有一个名为"items"的较小对象列表,每个项目都有一个数量和一个描述.

我希望SUM()按成员金额.但是,像这样调整查询不起作用:

FOR m …
Run Code Online (Sandbox Code Playgroud)

arangodb aql

6
推荐指数
1
解决办法
2082
查看次数

查询ArangoDB for Arrays

我在使用Java查询ArangoDB中的Arays值时遇到问题.我尝试过使用String []和ArrayList,两者都没有成功.

我的查询:

FOR document IN documents FILTER @categoriesArray IN document.categories[*].title RETURN document
Run Code Online (Sandbox Code Playgroud)

BindParams:

Map<String, Object> bindVars = new MapBuilder().put("categoriesArray", categoriesArray).get();
Run Code Online (Sandbox Code Playgroud)

categoriesArray包含一堆字符串.我不确定为什么它没有返回任何结果,因为如果我查询使用:

FOR document IN documents FILTER "Politics" IN document.categories[*].title RETURN document
Run Code Online (Sandbox Code Playgroud)

我得到了我正在寻找的结果.只是在使用Array或ArrayList时没有.

我也试过查询:

FOR document IN documents FILTER ["Politics","Law] IN document.categories[*].title RETURN document
Run Code Online (Sandbox Code Playgroud)

为了模拟ArrayList,但这不会返回任何结果.我会查询使用一堆单独的字符串,但是有太多的东西,当我用一个很长的字符串查询时,我从Java驱动程序中得到一个错误.因此,我必须使用Array或ArrayList进行查询.

categoriesArray的一个例子:

["Politics", "Law", "Nature"]
Run Code Online (Sandbox Code Playgroud)

数据库的示例图像:

在此输入图像描述

arangodb aql

6
推荐指数
1
解决办法
2698
查看次数

ArangoDB:通过示例插入查询功能

我的部分图表是使用两个大型集合之间的巨型连接构建的,每次我将文档添加到任一集合时都会运行它.该查询基于较旧的帖子.

FOR fromItem IN fromCollection
    FOR toItem IN toCollection
        FILTER fromItem.fromAttributeValue == toItem.toAttributeValue
        INSERT { _from: fromItem._id, _to: toItem._id, otherAttributes: {}} INTO edgeCollection
Run Code Online (Sandbox Code Playgroud)

这需要大约55,000秒才能完成我的数据集.我绝对欢迎提出更快的建议.

但我有两个相关的问题:

  1. 我需要一个upsert.通常,upsert没关系,但在这种情况下,因为我无法预先知道密钥,所以对我没有帮助.为了获得前面的密钥,我需要通过示例查询以找到其他相同的现有边的密钥.这似乎是合理的,只要它不会破坏我的性能,但我不知道如何在AQL中有条件地构造我的查询,以便在等效边缘尚不存在的情况下插入边缘,但如果等效边缘则不执行任何操作确实存在.我怎样才能做到这一点?
  2. 每次将数据添加到任一集合时,我都需要运行它.我需要一种方法只在最新的数据上运行它,这样它就不会尝试加入整个集合.如何编写允许我只加入新插入记录的AQL?它们与Arangoimp一起添加,我无法保证它们的更新顺序,因此我无法在创建节点的同时创建边缘.我如何只加入新数据?每次添加记录时我都不想花费55k秒.

query-optimization graph-databases arangodb aql

6
推荐指数
1
解决办法
152
查看次数

ArangoDB分面搜索性能

我们正在评估AlatoDB在facet计算空间中的性能.通过特殊的API或查询语言,还有许多其他产品可以做同样的事情:

  • MarkLogic Facets
  • ElasticSearch聚合
  • Solr Faceting等

我们知道,Arango中没有特殊的API可以明确地计算出来.但实际上,它不是必需的,多亏了全面的AQL,它可以通过简单的查询轻松实现,如:

 FOR a in Asset 
  COLLECT attr = a.attribute1 INTO g
 RETURN { value: attr, count: length(g) }
Run Code Online (Sandbox Code Playgroud)

此查询计算attribute1上的facet并以下列形式生成频率:

[
  {
    "value": "test-attr1-1",
    "count": 2000000
  },
  {
    "value": "test-attr1-2",
    "count": 2000000
  },
  {
    "value": "test-attr1-3",
    "count": 3000000
  }
]
Run Code Online (Sandbox Code Playgroud)

它说,在我的整个集合中,attribute1采用了三种形式(test-attr1-1,test-attr1-2和test-attr1-3)并提供了相关的计数.几乎我们运行DISTINCT查询和聚合计数.

看起来简单干净.只有一个,但真正的大问题 - 性能.

上面提供的查询运行时间为31秒!仅在8M文档的测试集合之上.我们已经尝试了不同的索引类型,存储引擎(使用rocksdb和没有),调查解释计划无济于事.我们在此测试中使用的测试文档非常简洁,只有三个短属性.

我们希望此时有任何意见.要么我们做错了什么.或者ArangoDB根本不适合在这个特定领域执行.

顺便说一下,最终的目标是在不到一秒的时间内运行如下内容:

LET docs = (FOR a IN Asset 

  FILTER a.name like 'test-asset-%'

  SORT a.name

 RETURN a)

LET attribute1 = (

 FOR a in docs 

  COLLECT attr = a.attribute1 INTO …
Run Code Online (Sandbox Code Playgroud)

facet aggregation faceted-search arangodb

6
推荐指数
1
解决办法
370
查看次数

ArangoDB AQL非大小写敏感性比较

让我们假设我有一些简单的文档存储在Arango集合中,如下所示:

[
    {"type":Cat, "quality":Fuzzy}
    {"type":Dog, "quality":Barks}
    {"type":Rabbit, "quality":Hoppy}
    {"type":Pig, "quality":Chubby}
    {"type":Red Panda, "quality":Fuzzy}
    {"type":Monkey, "quality":Hairy}
]
Run Code Online (Sandbox Code Playgroud)

现在让我们假设用户在我的应用程序中启动所有"模糊"动物的搜索,全部小写.AQL是否有办法进行不区分大小写的比较?例如:

FOR a IN animals
    FILTER a.type.toLowerCase() == fuzzy
    RETURN a
Run Code Online (Sandbox Code Playgroud)

现在我知道上面的例子不起作用,但如果有办法做到这一点会很好.谢谢!

case-sensitive arangodb aql

5
推荐指数
1
解决办法
1172
查看次数

如何检查 ArangoDB 中是否已存在集合

假设Col1我的数据库中已经存在一个集合。所以,做类似的事情:

var col = db.collection('Col1');
col.save({"name":"something"});
Run Code Online (Sandbox Code Playgroud)

会工作得很好。

Col2但是,如果我的数据库中尚不存在的集合尝试使用相同的东西,即

var col = db.collection('Col2');
col.save({"name":"something"})
Run Code Online (Sandbox Code Playgroud)

也会工作得很好。只是它不存在并且不会显示在我的数据库中。如果它抛出一些错误或我可以使用的内容trycatch结果语句。但既然这是不可能的,我怎么知道集合是否已经存在?

node.js arangodb arangojs

5
推荐指数
1
解决办法
3002
查看次数

我如何查看哪些查询已发送到 ArangoDB 服务器

我希望快速收集从使用 python-arangodb 驱动程序的应用程序发送到 ArangoDB 服务器的所有查询,而无需深入挖掘源代码,也无需嗅探 REST API 的 HTTP 流量。

ArangoDB Web UI 上是否没有一些管理/审核日志,可以显示哪些查询已发送到服务器?

这里使用3.2.5。

logging admin arangodb aql

5
推荐指数
1
解决办法
554
查看次数

ArangoDB 的图表 API pyArango

我正在使用 ArangoDB 社区版,我可以查询创建的图表AQL并获取 JSON 格式的结果,该结果在 ArangoDB Web 界面工具上以图形方式可视化。

AQL询问

FOR v,e,p IN 1..3 OUTBOUND 'germanCity/Hamburg' GRAPH 'routeplanner' 
OPTIONS{bfs :true} 
RETURN p
Run Code Online (Sandbox Code Playgroud)

JSON 输出

[
  {
    "edges": [
      {
        "_key": "6392826",
        "_id": "germanHighway/6392826",
        "_from": "germanCity/Hamburg",
        "_to": "germanCity/Cologne",
        "_rev": "_WmZ77pW--D",
        "distance": 500
      }
    ],
    "vertices": [
      {
        "_key": "Hamburg",
        "_id": "germanCity/Hamburg",
        "_rev": "_WmZ77Z---_",
        "population": 1000000,
        "isCapital": false,
        "loc": [
          53.5653,
          10.0014
        ]
      },
      {
        "_key": "Cologne",
        "_id": "germanCity/Cologne",
        "_rev": "_WmZ77Y6--B",
        "population": 1000000,
        "isCapital": false,
        "loc": [
          50.9364,
          6.9528
        ] …
Run Code Online (Sandbox Code Playgroud)

python graph arangodb aql pyarango

5
推荐指数
1
解决办法
1416
查看次数