我有多项服务,想了解它们如何通过请求链接
所以我创建了边缘作为类“Http”并添加了属性“request”
我有4项服务
我想显示所有通过边缘链接且属性等于“get_user_info”的服务
网关 -> 服务A -> 服务C -> 服务B
并且属性等于“delete_user”
网关 -> 服务B
它可以像“SELECT * FROM Services WHERE edge.request ='get_user_info'”
我试过了
SELECT *
FROM Services
WHERE in('http').request = 'get_user_info' OR out('http').request = 'get_user_info'
SELECT expand(in('http')[request='get_user_info']) FROM Services;
但是不起作用
我试过了
select * from `Services` WHERE @rid IN (select in from `http` where request = 'get_user_info') OR @rid IN (select out from `http` where request = 'get_user_info')
它有效,但我看到从 ServiceB 到网关的链接 我可以过滤该链接吗?
还在使用OrientDB?我建议升级到ArcadeDB。
使用您的案例作为 ArcadeDB 的 ruby 接口的测试用例 (https://github.com/topofocus/arcadedb)
基本上,使用 match 语句。它在测试用例的底部编译。
RSpec.describe Arcade::Base do
before(:all) do
connect
db = Arcade::Init.db
My::V1.create_type
My::E1.create_type
db.begin_transaction
My::V1.delete all: true
g,a,b,c = ["Gateway", "ServiceA", "ServiceB", "ServiceC"].map {|y| My::V1.insert a: y}
request='get_user_info'
g.assign via: My::E1, to: a, request: request # create edges
g.assign via: My::E1, to: b, request: "delete_user"
a.assign via: My::E1, to: c, request: request
c.assign via: My::E1, to: b, request: request
end
after(:all) do
db = Arcade::Init.db
db.rollback
end
context "check setup" do
Given( :gateway ){ My::V1.find a: 'Gateway' }
Then { gateway.out.size == 2 }
When ( :deleted_service ){ My::V1.where a: 'ServiceB' }
When ( :request_service ){ My::V1.where a: 'ServiceA' }
Then { gateway.nodes( :outE, where: { request: "delete_user" }) == deleted_service }
Then { gateway.nodes( :outE, where: { request: "get_user_info" }) == request_service }
end
context "get deleted User relation" do
Given( :gateway_record ){ Arcade::Match.new type: My::V1, where:{ a: 'Gateway' }, as: :g }
Given( :gateway ){ My::V1.where a: 'Gateway' }
Given ( :deleted_service ){ My::V1.where a: 'ServiceB' }
Then { gateway_record.to_s == "MATCH { type: my_v1, where: ( a='Gateway' ), as: g } RETURN g " }
Then { gateway_record.execute.select_result == gateway}
Given( :deleted_user_record ){ gateway_record.outE( My::E1, where: { request: 'delete_user' }).node(as: :f) }
Then { deleted_user_record.to_s == "MATCH { type: my_v1, where: ( a='Gateway' ), as: g }.outE('my_e1'){ where: ( request='delete_user' ) }.inV(){ as: f } RETURN g,f " }
Then { deleted_user_record.execute.allocate_model == gateway + deleted_service }
end
end