如何在我的C#应用程序中正确/标准地定义neo4j数据库的模式?
在我的应用程序中,我有节点属性和属性关系.我想定义这些节点和关系的模板/类,然后可以在运行时创建和关联这些节点和关系,并作为具有查询的类的对象进行检索.
经过大量的搜索和研究,我找到了与我的问题几乎相关的东西:http: //blog.micic.ch/net/using-neo4j-graph-db-with-c-net
但根据Neo4j文档,这些是遗留方法. https://github.com/Readify/Neo4jClient/wiki
那么Neo4J 2.0目前的标准方式是什么?因为我们现在也有标签.
我希望我的问题清楚.如果没有,请告诉我.
当我在图表上创建了一些约束时,如何才能看到它们并消除它们?将它们视为图形元素的语法是什么?
我有一个很长的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个标签(节点),甚至更多边缘)
当我对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)
知道为什么会发生这种情况以及是否有其他选择?
我有一个具有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 数据库,其中包含有关在特定时间访问多个检查站的访问者的信息。访问者、访问者和检查站被表示为节点。
每个访问者都由他/她的设备 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 中加载一些数据。我有一个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) 我正在尝试以下查询,
start n=node(*) match (n)-[r]->(m) return count(r)
我不确定这个查询是否正确。
我试图了解如何查询 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) 我正在尝试评估最适合以下用例的方法:
存在一组可以表示为图的实体。图中的每个顶点代表一个实体,每个(单向边)代表一个子级到父级的关系。一个实体可能有多个父实体,一个父实体可能有多个子实体。通常,所有实体都可以追溯到一个“主”实体。不能删除任何实体。要求是应该很容易追踪任何实体的所有祖先。以下是我想评估的一些条件:
以此图为例:
在常规的类似 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