小编rop*_*der的帖子

使用AQL(或arangojs)从ArangoDB获取d3的数据

我正在构建一个基于d3强制导向图的应用程序,后端使用ArangoDB,我希望能够尽可能高效地从Arango动态加载节点和链接数据.

我不是d3的专家,但总的来说,强制布局似乎希望将其数据作为节点数组和一组链接,这些链接将实际节点对象作为其源和目标,如下所示:

var nodes = [
        {id: 0, reflexive: false},
        {id: 1, reflexive: true },
        {id: 2, reflexive: false}
    ],
    links = [
        {source: nodes[0], target: nodes[1], left: false, right: true },
        {source: nodes[1], target: nodes[2], left: false, right: true }
    ];
Run Code Online (Sandbox Code Playgroud)

目前我正在使用以下AQL查询来获取相邻节点,但这非常麻烦.部分困难在于我希望包括节点的边缘信息,即使没有遍历这些边缘(为了显示节点在从数据库加载这些链接之前具有的链接数).

LET docId = "ExampleDocClass/1234567"

 // get data for all the edges
LET es = GRAPH_EDGES('EdgeClass',docId,{direction:'any',maxDepth:1,includeData:true})

// create an array of all the neighbor nodes
LET vArray = ( 
    FOR v IN GRAPH_TRAVERSAL('EdgeClass',docId[0],'any',{ maxDepth:1})
        FOR v1 IN v …
Run Code Online (Sandbox Code Playgroud)

javascript d3.js arangodb

11
推荐指数
1
解决办法
1508
查看次数

使用原始 Sequelize 查询的替换:避免单引号?

这可能有一个非常简单的答案,但我没有看到它。

我想使用 Sequelize 进行原始查询

var sequelize = require('sequelize');
sequelize
   .query("LOAD DATA LOCAL INFILE :file
           INTO TABLE :table
           FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n';",
          null,
          {raw:true},
          {file: datasetPath, table: "dataset_" + datasetName})
Run Code Online (Sandbox Code Playgroud)

问题在于,替换字符串包含用于:file替换(这很好,因为它是路径)和:table替换(这很糟糕,因为它只是应该是一个未经修饰的表名,并且会破坏查询)的单引号。在表名替换的情况下如何避免这些引号?

谢谢。

javascript mysql sql node.js sequelize.js

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

将标签存储在图形数据库中

我找到了一些关于在关系数据库和文档数据库中设置标记系统的建议,但对于图形/多模型数据库没有任何建议。

我正在尝试为 ArangoDB 中的文档(我们称它们为“文章”)设置一个标记系统。我可以想到两种在 Arango 等多模型(图形+文档)数据库中存储标签的明显方法:

  • 作为每个文章文档中的数组(文档数据库样式)
  • 作为一个单独的文档类,每个标签作为一个唯一的文档,边缘将标签文档连接到文章文档(更接近关系数据库风格)

这些实际上是实现此目的的两种主要方法吗?两者都不理想。例如:

  • 如果我在每个文章文档中存储标签,我可以索引标签,大概 ArangoDB 正在优化它们使用的空间。但是,我不能使用图形特征来链接或遍历标签(或者我必须单独进行)。
  • 如果我将标签存储为单独的标签文档,当我只想获取文档上的标签列表时,这似乎是额外的开销(额外的查询)。

这让我提出了一个明确的问题:关于后一个选项,是否有任何简单的方法可以自动使连接的“标签”文档显示在文章文档中?例如,有一个数组属性以某种方式“镜像”tag.name了连接的标签文档的属性?

也欢迎一般性建议。

javascript graph-databases arangodb multi-model-database

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

重复数据删除ArangoDB文档集

我确信有一种简单快捷的方法可以做到这一点,但它正在逃避我.我有一个大型数据集,有一些重复的记录,我想摆脱重复.(重复项由一个属性唯一标识,但文档的其余部分也应相同).

我试图创建一个只有几种不同方式的唯一值的新集合,但它们都很慢.例如:

FOR doc IN Documents
    COLLECT docId = doc.myId, doc2 = doc
    INSERT doc2 IN Documents2
Run Code Online (Sandbox Code Playgroud)

要么

FOR doc IN Documents
    LET existing = (FOR doc2 IN Documents2
        FILTER doc.myId == doc2.myId
        RETURN doc2)
    UPDATE existing WITH doc IN Documents2
Run Code Online (Sandbox Code Playgroud)

或(这给了我一个"违反的唯一约束"错误)

FOR doc IN Documents
    UPSERT {myId: doc.myId}}]}
    INSERT doc
    UPDATE doc IN Documents2
Run Code Online (Sandbox Code Playgroud)

arangodb aql

4
推荐指数
1
解决办法
1327
查看次数

不定期地重新整理和汇总数据

我有一个以下格式的数据集:

 person surveyDate value
      a       2006    35
      a       2009    44
      b       2005    24
      b       2007    38
      c       2006    51
      c       2007    52
      c       2009    49
Run Code Online (Sandbox Code Playgroud)

...我希望将其重塑为以下内容:

person dateDiff valueDiff
     a        3         9
     b        2        14
     c        3        -2 
Run Code Online (Sandbox Code Playgroud)

...其中dateDiff是每个人的最早和最新调查日期之间的差异,而valueDiff是每个人的最早和最新值之间的差异.请注意,有些人的调查比其他人更多,调查之间的时间也各不相同.

我一直试图用data.table(和melt/ dcast)来做这个,但是尝试使用:=in 来分配新的列值j让我完全陷入困境.其他方法是受欢迎的.速度不是一个大问题,因为数据集不是很大.

r data.table

2
推荐指数
1
解决办法
57
查看次数

在 ArangoDB 中快速向文档添加边缘计数

不太复杂:我想计算每个文档的边缘并将数字保存在文档中。我提出了两个有效的查询;不幸的是,因为我有数百万条边,所以两者都非常慢。是否有一种更快的方法来使用存储边数的属性来更新文档?(只是某个时间点的计数)

功能正常但速度缓慢的 AQL 查询:

FOR doc IN Documents
    LET inEdgesCount  = LENGTH(GRAPH_NEIGHBORS('edgeGraph', doc,{direction: 'inbound', maxDepth:1})
    LET outEdgesCount = LENGTH(GRAPH_NEIGHBORS('edgeGraph', doc,{direction: 'outbound', maxDepth:1})
    UPDATE doc WITH {inEdgesCount: inEdgesCount, outEdgesCount: outEdgesCount} In Documents
Run Code Online (Sandbox Code Playgroud)

或者:

FOR e IN Edges
    COLLECT docId = e._to WITH COUNT INTO counter
    UPDATE SPLIT(docId,'/')[1] WITH {inEdgeCount: counter}
Run Code Online (Sandbox Code Playgroud)

(然后对出站边缘重复)


顺便说一句,有什么方法可以查看查询速度(例如每秒执行 FOR 的次数)或完成百分比吗?我一直试图通过使用有限的查询来判断速度,但所需的时间似乎并不是线性扩展的。

graph-databases arangodb

2
推荐指数
1
解决办法
1303
查看次数