gpt4 book ai didi

c# - Neo4j:合并复制查询中的三个节点之一

转载 作者:行者123 更新时间:2023-11-30 16:41:27 46 4
gpt4 key购买 nike

正如我在另一篇文章中所述,我正在从 SQL Server 迁移到 Neo4j,因此我正在与学习曲线作斗争。我在搜索 StackOverflow 和谷歌来回答我的问题方面做得相当好,但我偶然发现了一个没有意义的奇怪查询结果。

C#代码:

public void AddMarketInfo(MarketInfo mi)
{
Bid bid = mi.Bid;
Ask ask = mi.Ask;

var query = clientConnection.Cypher
.Merge("(newbid:Bid { ID: {bID} })")
.OnCreate()
.Set("newbid = {bid}")
.WithParams(new
{
bID = bid.ID,
bid
})
.Merge("(newask:Ask { ID: {aID} })")
.OnCreate()
.Set("newask = {ask}")
.WithParams(new
{
aID = ask.ID,
ask
})
.Merge("(newMarketInfo:MarketInfo { ID: {id}, ASK: {askID}, BID: {bidID} })")
.OnCreate()
.Set("newMarketInfo = {mi}")
.WithParams(new
{
id = mi.ID,
bidID = bid.ID,
askID = ask.ID,
mi
})
.CreateUnique("(newask)-[rA:Ask_Input_Data]->(newMarketInfo)")
.CreateUnique("(newbid)-[rB:Bid_Input_Data]->(newMarketInfo)");
query.ExecuteWithoutResults();
}

我目前正在调试程序,所以这条语句对同一个数据执行了多次。是的,我现在进入数据库并删除所有节点。

当创建“Bid”节点和“Ask”节点时,它成功地与现有节点合并,但“MarketInfo”节点被复制。

有什么想法吗?

enter image description here

enter image description here

编辑 2:修改查询

所以我在 neo4j 文档中做了更多阅读:

https://neo4j.com/docs/developer-manual/current/cypher/clauses/merge/#query-merge-on-create-on-match

他们提供的例子是:

与 ON CREATE 和 ON MATCH 合并如果需要创建节点,则合并节点并设置属性。

查询。

MERGE (keanu:Person { name: 'Keanu Reeves' })
ON CREATE SET keanu.created = timestamp()
ON MATCH SET keanu.lastSeen = timestamp()
RETURN keanu.name, keanu.created, keanu.lastSeen

查询创建“keanu”节点,并设置创建时间的时间戳。如果“keanu”已经存在,则会设置不同的属性。

所以我修改了我的代码以“做同样的事情”:

var query = graphClient.Cypher
.Merge("(newbid:Bid { ID: {bID} })")
.OnMatch()
.Set("newbid = {bid}")
.OnCreate()
.Set("newbid = {bid}")
.WithParams(new
{
bID = bid.ID,
bid
})

.Merge("(newask:Ask { ID: {aID} })")
.OnMatch()
.Set("newask = {ask}")
.OnCreate()
.Set("newask = {ask}")
.WithParams(new
{
aID = ask.ID,
ask
})

.Merge("(newMarketInfo:MarketInfo { ID: {id}, ASK: {askID}, BID: {bidID} })")
.OnCreate()
.Set("newMarketInfo = {mi}")
.WithParams(new
{
id = mi.ID,
bidID = bid.ID,
askID = ask.ID,
mi
})
.Merge("(newask)-[rA:Ask_Input_Data]->(newMarketInfo)")
.Merge("(newbid)-[rB:Bid_Input_Data]->(newMarketInfo)");
query.ExecuteWithoutResultsAsync();

然而,节点 MarketInfo 节点仍在复制。我认为我现在正朝着正确的方向前进,但是……我仍然缺少一些东西。

最佳答案

问题来了,这让我很烦......

您不能将“ID”用作对象的参数。您可以使用“Id”或“id”或“iD”,但不能使用“ID”。一旦我切换到使用“Id”,该节点就再也不会重复了。

关于c# - Neo4j:合并复制查询中的三个节点之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49012796/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com