有人可以帮助我解决以下问题.我正在ArangoDB中编写自定义FOXX应用程序,我需要创建边缘集合.随着db._create("example");我可以创建文档集,但我不知道如何改变它的类型.我试过db._create("example", {type: "edge"});但它不起作用.
在文档中写了
集合具有在创建集合时由用户指定的类型.目前有两种类型:文档和边缘.默认类型是文档.
我怎样才能做到这一点?
有谁知道ArangoDB是否支持分面搜索以及性能与其他支持它的产品(例如Solr,MarkLogic)或不支持它的产品(例如Mongo)相比如何?
在搜索网站,阅读文档以及搜索Google网上论坛后,我认为不会在任何地方进行讨论.
谢谢
我正在使用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) 我在使用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)
数据库的示例图像:

我的部分图表是使用两个大型集合之间的巨型连接构建的,每次我将文档添加到任一集合时都会运行它.该查询基于较旧的帖子.
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秒才能完成我的数据集.我绝对欢迎提出更快的建议.
但我有两个相关的问题:
upsert没关系,但在这种情况下,因为我无法预先知道密钥,所以对我没有帮助.为了获得前面的密钥,我需要通过示例查询以找到其他相同的现有边的密钥.这似乎是合理的,只要它不会破坏我的性能,但我不知道如何在AQL中有条件地构造我的查询,以便在等效边缘尚不存在的情况下插入边缘,但如果等效边缘则不执行任何操作确实存在.我怎样才能做到这一点?我们正在评估AlatoDB在facet计算空间中的性能.通过特殊的API或查询语言,还有许多其他产品可以做同样的事情:
我们知道,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) 让我们假设我有一些简单的文档存储在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)
现在我知道上面的例子不起作用,但如果有办法做到这一点会很好.谢谢!
假设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)
也会工作得很好。只是它不存在并且不会显示在我的数据库中。如果它抛出一些错误或我可以使用的内容try和catch结果语句。但既然这是不可能的,我怎么知道集合是否已经存在?
我希望快速收集从使用 python-arangodb 驱动程序的应用程序发送到 ArangoDB 服务器的所有查询,而无需深入挖掘源代码,也无需嗅探 REST API 的 HTTP 流量。
ArangoDB Web UI 上是否没有一些管理/审核日志,可以显示哪些查询已发送到服务器?
这里使用3.2.5。
我正在使用 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)
[
{
"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)