gpt4 book ai didi

node.js - 为什么 Node-Neo4j 无法正确设置数据?

转载 作者:太空宇宙 更新时间:2023-11-03 22:34:15 25 4
gpt4 key购买 nike

想象一个这样的查询:

match (i:QuestionOrder) 
set i.count=i.count+1
merge (q:Question {text: '+text here+', index: i.count})
return q

如果集合发生在同一事务中(由 Node Neo4j 中的同一查询暗示),Neo4j 保证写锁。但是,我得到以下输出:

[
{
"columns":["q"],
"data":[{"text":"Have Kids...","index":1,"_id":542}]
},
{
"columns":["q"],
"data":[{"text":"You are...","index":1,"_id":545}]
}
]

根据我的理解,锁应该防止 index 相同。我在这里错过了什么吗?我该如何解决这个问题?

最佳答案

更改此查询以添加额外的测试可能有助于并发工作。如果有两个并发事务,则会在设置操作时获取锁。所以两者都已经读取了 i.count 并正在等待相同的值。

所以要么你早点捕获那个锁:

match (i:QuestionOrder) 
set i.lock = NOT i.lock
set i.count=i.count+1
merge (q:Question {text: '+text here+', index: i.count})
return q

或者您添加额外的检查来避免发生合并(然后您必须重试)

match (i:QuestionOrder) 
WITH i, i.count + 1 as new_count
set i.count = new_count
WITH i, new_count
WHERE i.count = new_count
merge (q:Question {text: '+text here+', index: i.count})
return q

或者在同一个交易中发送两个不同的语句,其中第一个语句执行锁定。

关于node.js - 为什么 Node-Neo4j 无法正确设置数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31876741/

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