我很喜欢在声明resourceType时RAML如何动态引用不同的模式:
resourceTypes:
- collection:
get:
responses:
200:
body:
application/json:
schema: <<schema>>
post:
body:
application/json:
schema: <<schema>>Create
responses:
200:
body:
application/json:
schema: <<schema>>
Run Code Online (Sandbox Code Playgroud)
在这里,我可以使用这个
/users:
type: { collection: { schema: user } }
Run Code Online (Sandbox Code Playgroud)
和RAML将给我userGET和POST的架构响应,并使用userCreate架构发送POST请求.凉!现在我可以使用大量不同的模式重用我的集合定义.
但是现在我想要为所有内容提供示例json,我希望以<<schema>>另一种方式利用var来利用"代码重用".我希望能够做到
resourceTypes:
- collection:
get:
responses:
200:
body:
application/json:
schema: <<schema>>
example: examples/v1-<<schema>>.json
post:
body:
application/json:
schema: <<schema>>Create
example: examples/v1-<<schema>>-create.json
responses:
200:
body:
application/json:
schema: <<schema>>
example: examples/v1-<<schema>>.json
Run Code Online (Sandbox Code Playgroud)
但不幸的是,这不起作用.我收到一个错误说
error: File with path "/examples/v1-%3C%3Cschema%3E%3E.json" does not exist
Run Code Online (Sandbox Code Playgroud)
所以现在我已经使用手动将它添加到我的所有集合中,/users上面的例子已成为
/users: …Run Code Online (Sandbox Code Playgroud) 也许潜在的问题是我使用的node-kafka模块是如何实现的,但也许不是,所以我们在这里......
使用node-kafa库,我遇到订阅consumer.on('message')事件的问题.该库正在使用标准events模块,所以我认为这个问题可能足够通用.
我的实际代码结构庞大而复杂,所以这里有一个基本布局的伪示例来突出我的问题.(注意:此代码段未经测试,因此我可能在此处有错误,但无论如何语法都没有问题)
var messageCount = 0;
var queryCount = 0;
// Getting messages via some event Emitter
consumer.on('message', function(message) {
message++;
console.log('Message #' + message);
// Making a database call for each message
mysql.query('SELECT "test" AS testQuery', function(err, rows, fields) {
queryCount++;
console.log('Query #' + queryCount);
});
})
Run Code Online (Sandbox Code Playgroud)
我在这里看到的是,当我启动我的服务器时,卡夫卡希望给我的100,000条左右的积压消息,它通过事件发射器完成.所以我开始收到消息.获取并记录所有消息大约需要15秒.
假设mysql查询速度相当快,这就是我期望看到的输出:
Message #1
Message #2
Message #3
...
Message #500
Query #1
Message #501
Message #502
Query #2
... and so on in some …Run Code Online (Sandbox Code Playgroud) 作为Cypher和Neo4j的新手,我无法构建我的用例查询.我正在构建一个简单的ACL(访问控制列表),并且正在寻找通过权限关系的路径.一张图片可以更好地解释它:

Key:
Users -> Blue
Groups -> Yellow, Green
Resource Tree -> Red
Run Code Online (Sandbox Code Playgroud)
现在我想看看Bob是否存在路径到Bob拥有更新访问权限的eVar 33资源.因为有直接的路径,我可以通过跑步得到我想要的东西
MATCH p =(usr:Usr)-[:AXO {update: true}]->(aco:ACO)
WHERE usr.name = 'Bob' AND aco.name = 'eVar 33'
RETURN p
Run Code Online (Sandbox Code Playgroud)
但现在,Bob也是Media Mgmt小组的成员,该小组授予他对转换资源的读取权限.并且因为转换比eVar 33更靠资源树,eVar 33应该继承此权限.但是当我运行相同的查询时,没有找到路径.我知道这是因为我不允许遍历和关系,但我怎么能这样做?{read: true}:IN:HAS
我试过了:
MATCH p =(usr:Usr)-[:IN|:HAS|:AXO {read: true}]->(aco:ACO)
WHERE usr.name = 'Bob' AND aco.name = 'eVar 33'
RETURN p
Run Code Online (Sandbox Code Playgroud)
认为这会允许遍历这些关系,但它仍然找不到路径(因为我不允许超过1的深度?).
所以这是我的需求:
从我的研究(很多谷歌搜索),我看不出这是可能的,但我认为仍然值得问.我有很多节点,如:
(org:Organization {name: "Organization 1234"})
Run Code Online (Sandbox Code Playgroud)
其中1234可以是任何非负整数.
为了更新数据库以使用新的API,我想重命名集合中的每一个,以便结果看起来像:
(org:Organization {name: "Org_1234"})
Run Code Online (Sandbox Code Playgroud)
所以,我需要在当前属性上使用[0-9] +正则表达式匹配来混搭Org_.
真的,我甚至不知道从哪里开始.我在文档中看到的只是正则表达式可以用作WHERE子句(WHERE n.property =~ {regex})中的谓词.有没有一种方法只使用Cypher,因为我没有使用Java库?