标签: graph-databases

在C#中使用Neo4JClient为Neo4J定义模式

如何在我的C#应用​​程序中正确/标准地定义neo4j数据库的模式?

在我的应用程序中,我有节点属性和属性关系.我想定义这些节点和关系的模板/类,然后可以在运行时创建和关联这些节点和关系,并作为具有查询的类的对​​象进行检索.

经过大量的搜索和研究,我找到了与我的问题几乎相关的东西:http: //blog.micic.ch/net/using-neo4j-graph-db-with-c-net

但根据Neo4j文档,这些是遗留方法. https://github.com/Readify/Neo4jClient/wiki

那么Neo4J 2.0目前的标准方式是什么?因为我们现在也有标签.

我希望我的问题清楚.如果没有,请告诉我.

c# neo4j graph-databases neo4jclient

3
推荐指数
1
解决办法
844
查看次数

如何获得 Neo4j 中已经存在的约束?

当我在图表上创建了一些约束时,如何才能看到它们并消除它们?将它们视为图形元素的语法是什么?

neo4j graph-databases

3
推荐指数
4
解决办法
4564
查看次数

在Neo4J Cypher 2.0中为多个节点/边创建一个MERGE请求或将其拆分为事务更好吗?

我有一个很长的Cypher查询(新的Neo4J 2.0版本),它使用MERGE命令创建多个节点和连接.

问题是:你认为我最好将它分成不同的部分并将其作为交易提交(为了稳健性),还是应该保留长单一(为了速度)?

这是查询:

MATCH (u:User {name: "User"}) MERGE (tag1:Hashtag {name:"tag1"}) MERGE (tag2:Hashtag    
{name:"tag2"}) MERGE (tag3:Hashtag {name:"tag3"}) MERGE (tag4:Hashtag {name:"tag4"}) 
MERGE tag1-[:BY]->u MERGE tag2-[:BY]->u MERGE tag3-[:BY]->u MERGE tag4-[:BY]->u;
Run Code Online (Sandbox Code Playgroud)

(我故意将请求缩短,想象有50个标签(节点),甚至更多边缘)

neo4j graph-databases cypher

3
推荐指数
1
解决办法
3277
查看次数

为什么我对REST Graph的REST调用时间太长(2-4s)?

当我对IBM Graph实例进行任何调用时,它需要几秒钟才能完成.

curl "$apiURL/vertices" \
-u "$username:$password"
-X POST \
-H 'Content-Type: application/json' \
-d '{ "Name": "Million Dollar Baby",
      "Type": "Movie" }'
Run Code Online (Sandbox Code Playgroud)

知道为什么会发生这种情况以及是否有其他选择?

graph-databases ibm-graph ibm-cloud

3
推荐指数
1
解决办法
112
查看次数

只获取Neo4j中的特定关系类型

我有一个具有PersonId属性的Person节点和一个具有DocumentId属性的Document节点.

关系就像我们在电子邮件中一样,

(person)-[:SENT]->(doc)
(doc)-[:TO]->(person)
(doc)-[:CC]->(person)
(doc)-[:BCC]->(person)
Run Code Online (Sandbox Code Playgroud)

现在,当我按照附加的图像显示查询时,在第二个查询中,带有SIZE功能的第4列在第2行中给出"1".

在此输入图像描述

你能说为什么我在那里得到1的数量?即使我指定关系类型:TO.需要帮助请叫我.

提前致谢.

neo4j graph-databases cypher

3
推荐指数
1
解决办法
588
查看次数

Neo4j - 不能在聚合函数内使用聚合函数

每个人!我有一个 Neo4j 数据库,其中包含有关在特定时间访问多个检查站的访问者的信息。访问者、访问者和检查站被表示为节点。

每个访问者都由他/她的设备 MAC 地址标识,每个检查点都有一个唯一的 ID。

每个访问节点都包含一个 EnterTime 属性,这是在相应检查点附近首次注意到具有特定 MAC 地址的访问者的时间(自 1970 年以来的毫秒数)。

注意:一次访问的持续时间应计算为下一次访问的 EnterTime 与本次访问的 EnterTime 之间的差值。

我的目标是找到一些关于访问的统计数据,例如,1)特定访客的平均访问时间,2)特定商店的平均访问时间,3)最受欢迎的商店(即商店总访问时间最长的 4) 最受欢迎的商店(即平均访问时间最长的商店)等。

数据库是用这个密码查询创建的:

//Create visitors:
CREATE (Visitor1: Visitor {MAC:'00:0a:95:9d:68:16'})
CREATE (Visitor2: Visitor {MAC:'00:0a:95:9d:68:17'})
CREATE (Visitor3: Visitor {MAC:'00:0a:95:9d:68:18'})

//Create CheckPoints:
CREATE (CheckPoint1: CheckPoint {CheckPointId: 1})
CREATE (CheckPoint2: CheckPoint {CheckPointId: 2})
CREATE (CheckPoint3: CheckPoint {CheckPointId: 3})
CREATE (CheckPoint4: CheckPoint {CheckPointId: 4})
CREATE (CheckPoint5: CheckPoint {CheckPointId: 5})


//Create visits:
//by visitor 1:
CREATE  (Visitor1)-[:MAKES]->(Visit1: Visit {EnterTime: 1488358800000})-[:TO]->(CheckPoint1)
CREATE  (Visitor1)-[:MAKES]->(Visit2: Visit {EnterTime: 1488359400000})-[:TO]->(CheckPoint2)
CREATE …
Run Code Online (Sandbox Code Playgroud)

neo4j graph-databases cypher

3
推荐指数
1
解决办法
1556
查看次数

如何在 Neo4J 中使用 Cypher 向现有节点添加多个值

我正在尝试在 Neo4J 中加载一些数据。我有一个Person已经设置好的节点。现在,该节点需要有一个email属性,该属性应该是数组(或集合)。基本上,该email属性需要有多个值,例如 -

email: ["abc@xyz.com", "abc@foo.com"]
Run Code Online (Sandbox Code Playgroud)

我在这里遇到了类似的问题,但所有答案都表明在创建节点本身时设置多个属性值。就像这个答案中的这个查询一样-

CREATE (e:Employee { name:"Sam",languages: ["C", "C#"]})
RETURN e
Run Code Online (Sandbox Code Playgroud)

但我的问题是Person节点已经创建,我现在需要设置email它的属性。

这是我必须加载的数据的一小部分 -

 Personid|email 
933|Mahinda933@hotmail.com 
933|Mahinda933@yahoo.com
933|Mahinda933@zoho.com 
1129|Carmen1129@gmail.com
1129|Carmen1129@gmx.com 
1129|Carmen1129@yahoo.com
4194|Ho.Chi4194@gmail.com 
4194|Ho.Chi4194@gmx.com
Run Code Online (Sandbox Code Playgroud)

此外,数据来自包含数千行的 CSV 文件,因此我的查询需要是通用的,我无法为每个单独的Person节点设置属性。

当我用这个子集测试电子邮件属性的创建时,我的第一次尝试是这样的 -

 MATCH (n:TESTPERSON{id:933})
 SET n.email = "Mahinda933@hotmail.com"
 RETURN n

 MATCH (n:TESTPERSON{id:933})
 SET n.email = "Mahinda933@yahoo.com"
 RETURN n
Run Code Online (Sandbox Code Playgroud)

正如我所想,这只是将email属性覆盖为最近查询中的值。

在查看了此处和 Cypher 文档上的答案后,我发现 Neo4J 允许您将数组/集合(同一类型的多个值)设置为属性值,然后我尝试了这个 -

 // CREATE test node …
Run Code Online (Sandbox Code Playgroud)

csv neo4j graph-databases cypher

3
推荐指数
1
解决办法
2801
查看次数

如何统计neo4j中关系的总数?

我正在尝试以下查询,

start n=node(*) match (n)-[r]->(m) return count(r)

我不确定这个查询是否正确。

neo4j graph-databases cypher

3
推荐指数
1
解决办法
2259
查看次数

从neo4j查询结果构建NetworkX图?

我试图了解如何查询 Neo4j 数据库,并将结果转换为 networkx 图。我可以查询(电影图)数据库并获得结果,但我可以找到一种简单的方法将结果转换为 networkx 图。是否可以执行以下操作?

from neo4j import GraphDatabase
import networkx as nx

driver = GraphDatabase.driver('bolt://localhost:7687', auth=("neo4j", "hunter2"))

query = """
MATCH (p:Person)-[:ACTED_IN]->(m:Movie)
WHERE toLower(m.title) CONTAINS "you"
RETURN *
"""

with driver.session() as session:
    result = session.run(query)

# This bit doesn't work
G = nx.Graph(result)
Run Code Online (Sandbox Code Playgroud)

python neo4j graph-databases networkx cypher

3
推荐指数
2
解决办法
2130
查看次数

AWS Neptune DB 与 Dynamo DB 的实体沿袭

我正在尝试评估最适合以下用例的方法:

存在一组可以表示为图的实体。图中的每个顶点代表一个实体,每个(单向边)代表一个子级到父级的关系。一个实体可能有多个父实体,一个父实体可能有多个子实体。通常,所有实体都可以追溯到一个“主”实体。不能删除任何实体。要求是应该很容易追踪任何实体的所有祖先。以下是我想评估的一些条件:

  1. 深树(最高的祖先可以在很远的地方)vs.浅树(最高的祖先通常在不远处)
  2. 宽遍历路径(一个顶点可以有很多父节点)与窄遍历路径(一个顶点通常没有很多父节点)
  3. 我错过的任何其他重要条件

以此图为例:

graph_db_compare

在常规的类似 DynamoDB 的数据库中,这将表示为:

-------------------
entity | parents  |
-------------------
A      | []       |
-------------------
B      | [A]      |
-------------------
C      | [A]      |
-------------------
D      | [A]      |
-------------------
E      | [B, C, D]|
-------------------
F      | [C, D]   |
-------------------
Run Code Online (Sandbox Code Playgroud)

预先存在的条件是:

我对 DynamoDB 更加熟悉,但对 NeptuneDB 或任何图形数据库只有非常基本的熟悉,因此 DynamoDB 需要较少的前期时间投入。另一方面,NeptuneDB 当然更适合关系图存储,但在什么情况下值得技术开销呢?

database amazon-web-services graph-databases amazon-dynamodb amazon-neptune

3
推荐指数
1
解决办法
1196
查看次数